使用 Xamarin.Forms 或 MAUI 创建项目时,我很难理解这三件事之间的区别。我知道它们是什么 -INotifyPropertyChanged
是当您想要在 XAML 中使用绑定时需要实现的接口,BindableObject
是实现所述接口的 Xamarin.Forms 类,也是ObservableObject
在 Xamarin 社区工具包中找到的也实现该接口的类。我只是不太明白它们之间的区别(尤其是后两者)以及您什么时候会使用它们中的任何一个?我读过不同的教程,他们都说了不同的事情 - 您需要自己实现接口(以便您的视图模型实现它),您的视图模型需要继承自BindableObject
,或者 - 如果您使用的是 Xamarin Community Toolkit (您可能会使用 Xamarin Community Toolkit )应该使用/正在使用) - 继承自ObservableObject
. 但是 - 就像我说的 - 为什么你应该使用上面提到的任何解决方案而不是其他解决方案?
如果您实现INotifyPropertyChanged
接口 Visual Studio(或 ReSharper 扩展,我不确定是哪一个)会自动实现它需要的方法并添加以下代码:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void PropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Run Code Online (Sandbox Code Playgroud)
但它使您的代码更长/更丑,所以我理解为什么您只想从已经实现该接口的类继承。但为什么有些人说你应该自己实施呢?当您自己实现它或从已经实现它的类继承时有区别吗?另外,如果您决定从一个类继承 - 为什么要使用其中一个而不是另一个?Xamarin.Forms 的文档在这方面相当不错,但它没有承认 Xamarin 社区工具包的存在,并且Xamarin 社区工具包文档没有回答我的问题,也没有说明为什么您应该使用它们ObservableObject
而不是 Xamarin。表单内置BindableObject …