在使用 Xamarin.Forms 或 MAUI 創建專案時,我很難理解這三件事之間的區別。我知道這些是什么——INotifyPropertyChanged當你想在 XAML 中使用系結時需要實作的介面,是BindableObject實作所述介面的 Xamarin.Forms 類,并且ObservableObject是在 Xamarin Community Toolkit 中找到的也實作該介面的類。我只是不太了解它們之間的區別(尤其是后兩者)以及何時使用它們中的任何一個?我讀過不同的教程,他們都說了不同的話——你需要自己實作介面(所以你的視圖模型實作它),你的視圖模型需要繼承自BindableObject,或者——如果你正在使用 Xamarin 社區工具包(你可能應該使用/正在使用) - 繼承自ObservableObject. 但是 - 就像我說的 - 為什么你應該使用上面提到的任何解決方案而不是其他解決方案?
如果您實作INotifyPropertyChanged介面 Visual Studio(或 ReSharper 擴展,我不確定是哪一個)會自動實作它需要的方法并添加此代碼:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void PropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
但這會使您的代碼更長/更丑,所以我理解為什么您只想從已經實作該介面的類繼承。但是為什么有些人說你應該總是自己實作呢?當您自己實作它或從已經實作它的類繼承時有區別嗎?此外,如果您決定從一個類繼承 - 為什么要使用其中一個而不是另一個?Xamarin.Forms 的檔案在這方面非常好,但它不承認 Xamarin 社區工具包的存在,并且Xamarin 社區工具包檔案沒有回答我的問題,也沒有說明為什么你應該使用它們ObservableObject而不是 Xamarin。表單的內置BindableObject.
uj5u.com熱心網友回復:
我對不同的課程有一些困惑:
Xamarin.Forms.BindableObject 旨在用于創建類似于具有可系結屬性的自定義視圖。它還實作了 INotifyPropertyChanged,但我認為您不應該將它用于 ViewModel。
社區工具包中的 ObservableObject 可以用作您喜歡與資料系結一起使用的任何類的基類,您不需要自己實作它。
如果您對處理 OnPropertyChanged 有一些自定義要求,您確實需要自己實作介面,但如果您只想擁有默認行為,ObservableObject 非常好。
uj5u.com熱心網友回復:
我認為您的困惑源于Bindable和Observable之間的區別。
您對INotifyPropertyChanged的??看法基本正確。這是價值變化的抽象概念,而不是該變化的具體實作。它不僅用于 XAML,它還可以用于任何事情。但我的意思是什么?
系統的不同部分會關心為什么一個值會因為不同的原因而改變。一個類會根據某項更改的值將資料靜默記錄到文本檔案中,這與在某項更改時更新應用程式用戶界面的類非常不同。
INotifyPropertyChanged 只是一種促進更改通知的機制,僅此而已。
回到ObservableObject和BindableObject之間的區別,它們只是針對不同的用例。
看看我上面鏈接的檔案。看看 BindableObject 類上有多少個方法?請注意OnPropertyChanged只是物件上的眾多方法之一,但在ObservableObject 上它是僅有的兩個方法之一?
BindableObject 用作??元素的基類。例如,更改按鈕的狀態以在單擊時禁用它。或者更新 Label 的文本值以回應某些變化。
ObservableObject 可以用作任何需要通知其他類有關值更改的任何東西的基類。正如您正確指出的那樣,這是為了阻止您一直需要撰寫樣板 INotifyPropertyChanged 實作。
這個主題還有很多,但我不想用大量資訊轟炸你。
如果您正在尋找一些真實世界的示例,請研究MVVM 設計模式如何利用類之間的更改通信這一概念。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/432717.html
標籤:C# xamarin xamarin.forms xamarin 社区工具包
