INotifyPropertyChanged 属性

INotifyPropertyChanged 类型是一个允许将 MVVM 支持代码插入现有类型的属性。 与其他相关属性(ObservableObjectObservableRecipient)一起,其目的是在需要这些类型的相同功能,但已经从另一种类型中实现目标类型的情况下,为开发人员提供支持。 由于 C# 不允许多重继承,因此可以转而使用这些属性让 MVVM 工具包生成器将相同的代码直接添加到这些类型中,从而避开此限制。

注意

为了正常工作,带批注的类型需要位于分部类中。 如果对类型进行嵌套,则必须也将声明语法树中的所有类型批注为分部。 否则将导致编译错误,因为生成器无法使用请求的其他代码生成该类型的其他分部声明。

注意

这些属性仅适用于目标类型不能仅从等效类型(例如从 ObservableObject)继承的情况。 如果可能,推荐的方法是继承,因为它将通过避免在最终程序集中创建重复的代码来减小二进制文件大小。

平台 API:INotifyPropertyChangedObservableObjectObservableRecipient

如何使用它们

使用这些属性中的任何一个都非常简单:只需将它们添加到分部类,相应类型的所有代码就会自动生成到该类型中。 例如,来看看以下示例:

[INotifyPropertyChanged]
public partial class MyViewModel : SomeOtherType
{    
}

这将在 MyViewModel 类型中生成一个完整的 INotifyPropertyChanged 实现,并附带可用于降低详细程度的其他帮助程序(如 SetProperty)。 以下是各种属性的简要总结:

  • INotifyPropertyChanged:实现接口,并添加帮助程序方法来设置属性和引发事件。
  • ObservableObject:添加 ObservableObject 类型中的所有代码。 它在概念上等同于 INotifyPropertyChanged,主要区别在于它还实现了 INotifyPropertyChanging
  • ObservableRecipient:添加 ObservableRecipient 类型中的所有代码。 特别是,可以将其添加到从 ObservableValidator 继承的类型,以合并两者。

示例

  • 查看示例应用(适用于多个 UI 框架),以了解 MVVM 工具包的实际运行情况。
  • 还可以在单元测试中查找更多示例。