在使用 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
.