在使用Xamarin.Forms或MAUI创建项目时,我很难理解这三个东西的区别。我知道它们分别是什么——INotifyPropertyChanged
是一个接口,当你想要在XAML中使用绑定时需要实现该接口,BindableObject
是Xamarin.Forms类,其实现了上述接口,而ObservableObject
是Xamarin Community Toolkit中的一个类,也实现了该接口。我只是不太明白它们之间的区别(特别是后面两个),以及何时使用它们?我已经阅读了不同的教程,它们都说不同的事情——你需要自己实现该接口(因此您的视图模型实现该接口),您的视图模型需要继承自BindableObject
,或者——如果您正在使用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));
}
但这样会让你的代码变得更冗长/丑陋,所以我理解为什么你想要只从已经实现该接口的类中继承。但是为什么有些人说你应该总是自己实现它呢?当你自己实现它或者从已经实现了它的类中继承时有什么区别吗?此外,如果你决定从一个类中继承 - 为什么要选择其中之一而不是另一个?Xamarin.Forms的文档在这方面非常好,但是它没有提到Xamarin Community Toolkit的存在,Xamarin Community Toolkit的文档没有回答我的问题,也没有说明为什么你应该使用他们的
ObservableObject
而不是Xamarin.Form内置的BindableObject
。
ObservableObject
,因为没有必要继承自BindableObject
?此外 - 这是否意味着如果我遵循MVVM模式,就不需要从BindableObject
继承,因为XAML的代码后台文件已经从ContentPage
(间接继承自BindableObject
)继承了? - Razwill