c# - 制作一个适合 Property Change Notification 的类

标签 c# wpf

要在 WPF 中实现数据绑定(bind),根据 MS 的说法,“类需要提供适当的属性更改通知”。 [ ref here ]

据我所知,部分设置意味着采取以下步骤,如果尚未在类里面设置(MSDN 上的引用 this article):

  • 当属性发生变化时,它们需要调用一个方法来引发事件。
    • 这意味着必须更改自动实现的属性,以便它们使用私有(private)支持字段,因此 set 可以更改属性并调用方法来引发事件。
  • 该类需要实现 INotifyPropertyChanged。
  • 该类需要声明 PropertyChangedEventHandler 事件。
  • 事件需要像这样引发:

...

// Create the OnPropertyChanged method to raise the event 
protected void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(name));
    }
}

如果我已经有许多不采取任何这些步骤的现有类,那么更改这些类的最佳方法是什么,以便它们仅在满足这些标准所需的范围内进行更改

最佳答案

如果您想要对代码影响最小的解决方案,那么您需要 Fody PropertyChanged weaver .这是使用 Install-Package PropertyChanged.Fody 或通过 VS 包管理器对话框作为 NuGet 包安装的。

安装后,您可以使用[ImplementPropertyChanged] 属性标记一个类,您的工作就基本完成了。编织器将通过操作生成的 IL 来在编译时添加相关的事件调用,这意味着您不必在代码中显式实现接口(interface)或事件调用。您也可以保留自动实现的属性语法!

链接的文档提供了更多高级案例的详细信息,但根据我的经验,开箱即用的行为足以满足几乎所有需求。

关于c# - 制作一个适合 Property Change Notification 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30718724/

相关文章:

c# - 错误 : EntityType does not declare a navigation property with the name

c# - .NET/C# - 对 DataTable 进行排序,然后手动处理行

c# - 类型兼容性和 LINQ 之谜

c# - 我可以将 Stream 对象转换为 FileInfo 对象吗?

c# - 如何访问 x :Name-property in code?

c# - 从主 Viewmodel 调用 subview 模型方法

c# - 十六进制值 0x00 是加载 XML 文档的无效字符

c# - 样式化 Wpf 饼图

c# - 使用 WPF MVVM 推送组合框

wpf - 智能 DropShadowEffect