Xamarin.Mac 中的常見模式和慣用語
在整個透過 C# 公開的 Apple API 中,某些慣用語和模式會反覆出現。 如果您有使用 Xamarin.iOS 進行程式設計的經驗,這些可能看起來很熟悉。 檔通常會重複參考這些模式和慣用語,因此對它們有紮實的理解可協助您瞭解找到的檔。
MVC - 模型檢視控制器
「模型檢視控制器」或「MVC」是整個Cocoa中常見的模式。 詳細的討論超出本檔的範圍,但簡略來說,它是將應用程式建構成元件的方式:
- 模型 物件代表正在檢視和操作的基礎數據(如同通訊簿中的位址)
- 檢視 物件會處理螢幕上指定物件的繪圖,並處理使用者互動 (顯示螢幕上位址的文字欄位)
- 控制器 物件會處理模型與檢視之間的互動。 他們會推送模型變更「向上」來更新檢視,並在使用者在UI中進行變更時,從檢視推送「向下」變更。
如果您熟悉來自 WPF 等其他連結庫的 MVVM(模型檢視 ViewModel),控制器的作用類似於 ViewModel,但通常會更緊密地系結至特定的 UI 元素。
如需詳細資訊,請參閱:
數據源/委派/子類別化
Cocoa 中另一個非常常見的模式是處理將數據提供給UI元素,並回應用戶互動。 例如 NSTableView
,您需要以某種方式提供每個數據列的數據、代表該數據列的一組 UI 元素、一組回應使用者互動的行為,以及可能有些程度的自定義。 數據源和委派模式可讓您處理大部分的情況,而不需要自行進行子類別化 NSTableView
。
屬性
DataSource
會指派自定義子類別NSTableViewDataSource
的實例,其會呼叫以數據填入資料表(透過GetRowCount
和GetObjectValue
)。屬性
Delegate
會指派自定義子類別NSTableViewDelegate
的實例,其會提供給定模型對象的檢視(透過GetViewForItem
),並處理UI互動(透過DidClickTableColumn
、MouseDownInHeaderOfTableColumn
等)。
在某些情況下,您會想要在委派或數據源中提供的勾點之外自定義控件,而且您可以直接將檢視子類別化。 不過,請小心,在許多情況下,覆寫預設行為會要求您自行處理所有行為(自定義選取行為可能需要您自行實作所有選取行為)。
在 Xamarin.iOS 中,某些 API,例如UITableView
已使用實作委派和數據源的屬性來擴充 。UITableViewSource
這是為了解決單一 C# 類別只能有一個基類的常見限制,而我們的通訊協議呈現是透過基類完成的。
如需在 Xamarin.Mac 應用程式中使用資料表 VIews 的詳細資訊,請參閱我們的 數據表檢視 檔。
通訊協定
中的 Objective-C 通訊協定可以與 C# 中的介面進行比較,而且在許多情況下會在類似情況下使用。 例如上述 NSTableView
範例,委派和數據源實際上是通訊協定。 Xamarin.Mac 會使用您可以覆寫的虛擬方法,將這些公開為基類。 C# 介面和 Objective-C 通訊協定之間的主要差異在於,通訊協定中的某些方法可能是選擇性的實作。 您必須查看 API 的檔案和/或定義,以判斷什麼是選擇性的。
如需詳細資訊,請參閱我們的 委派、通訊協定和事件 檔。