Xamarin.Mac 中的常見模式和慣用語

在整個透過 C# 公開的 Apple API 中,某些慣用語和模式會反覆出現。 如果您有使用 Xamarin.iOS 進行程式設計的經驗,這些可能看起來很熟悉。 檔通常會重複參考這些模式和慣用語,因此對它們有紮實的理解可協助您瞭解找到的檔。

MVC - 模型檢視控制器

「模型檢視控制器」或「MVC」是整個Cocoa中常見的模式。 詳細的討論超出本檔的範圍,但簡略來說,它是將應用程式建構成元件的方式:

  • 模型 物件代表正在檢視和操作的基礎數據(如同通訊簿中的位址)
  • 檢視 物件會處理螢幕上指定物件的繪圖,並處理使用者互動 (顯示螢幕上位址的文字欄位)
  • 控制器 物件會處理模型與檢視之間的互動。 他們會推送模型變更「向上」來更新檢視,並在使用者在UI中進行變更時,從檢視推送「向下」變更。

如果您熟悉來自 WPF 等其他連結庫的 MVVM(模型檢視 ViewModel),控制器的作用類似於 ViewModel,但通常會更緊密地系結至特定的 UI 元素。

如需詳細資訊,請參閱:

數據源/委派/子類別化

Cocoa 中另一個非常常見的模式是處理將數據提供給UI元素,並回應用戶互動。 例如 NSTableView ,您需要以某種方式提供每個數據列的數據、代表該數據列的一組 UI 元素、一組回應使用者互動的行為,以及可能有些程度的自定義。 數據源和委派模式可讓您處理大部分的情況,而不需要自行進行子類別化 NSTableView

  • 屬性 DataSource 會指派自定義子類別 NSTableViewDataSource 的實例,其會呼叫以數據填入資料表(透過 GetRowCountGetObjectValue)。

  • 屬性 Delegate 會指派自定義子類別 NSTableViewDelegate 的實例,其會提供給定模型對象的檢視(透過 GetViewForItem),並處理UI互動(透過 DidClickTableColumnMouseDownInHeaderOfTableColumn等)。

在某些情況下,您會想要在委派或數據源中提供的勾點之外自定義控件,而且您可以直接將檢視子類別化。 不過,請小心,在許多情況下,覆寫預設行為會要求您自行處理所有行為(自定義選取行為可能需要您自行實作所有選取行為)。

在 Xamarin.iOS 中,某些 API,例如UITableView已使用實作委派和數據源的屬性來擴充 。UITableViewSource 這是為了解決單一 C# 類別只能有一個基類的常見限制,而我們的通訊協議呈現是透過基類完成的。

如需在 Xamarin.Mac 應用程式中使用資料表 VIews 的詳細資訊,請參閱我們的 數據表檢視 檔。

通訊協定

中的 Objective-C 通訊協定可以與 C# 中的介面進行比較,而且在許多情況下會在類似情況下使用。 例如上述 NSTableView 範例,委派和數據源實際上是通訊協定。 Xamarin.Mac 會使用您可以覆寫的虛擬方法,將這些公開為基類。 C# 介面和 Objective-C 通訊協定之間的主要差異在於,通訊協定中的某些方法可能是選擇性的實作。 您必須查看 API 的檔案和/或定義,以判斷什麼是選擇性的。

如需詳細資訊,請參閱我們的 委派、通訊協定和事件 檔。