c# - 如何避免手动实现 INotifyPropertyChanged

标签 c# winforms data-binding collections

有什么办法可以避免这种情况。我有很多绑定(bind)到 DataGridView 的类,它们只是具有默认 getter 和 setter 的简单属性集合。所以这些类非常简单。现在我需要为他们实现 INotifyPropertyChanged 接口(interface),这将增加代码量。 有没有我可以继承的类以避免编写所有这些无聊的代码?我想象我可以从某个类继承我的类并用一些属性装饰属性,它会产生魔力。这可能吗?

我很了解面向方面的编程,但我更愿意以面向对象的方式进行编程。

最佳答案

视情况而定;你可以使用 PostSharp编写这样一个由编织者重写的属性;然而,我很想手动完成它——也许使用一种通用的方法来处理数据更新,即

private string name;
public string Name {
    get { return name; }
    set { Notify.SetField(ref name, value, PropertyChanged, this, "Name"); }
}

与:

public static class Notify {
    public static bool SetField<T>(ref T field, T value,
         PropertyChangedEventHandler handler, object sender, string propertyName)
    {
        if(!EqualityComparer<T>.Default.Equals(field,value)) {
            field = value;
            if(handler!=null) {
                handler(sender, new PropertyChangedEventArgs(propertyName));
            }
            return true;
        }
        return false;
    }
}

关于c# - 如何避免手动实现 INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3130491/

相关文章:

WPF用户控件: can I bind properties from an internal and an external datacontext?

C# 到 F# CRC16 ^ 和 ^^^ 的工作方式不同。 ^ 如何运作?

c# - 接口(interface)的IL代码

c# - 如何确定一个控件是否是其他控件的容器

javascript - SAPUI5 - 数据绑定(bind)到现有 XML 表

javascript - 如何使用 Vue.js 将图像 url 绑定(bind)到 Framework7 list-item "media"属性?

c# - 编码导出 CSV 文件的问题

c# - .NET - 通过顽固的控制检测鼠标移动

c# - 对 Winform 的叠加控制

c# - 如何获取文本框,编辑它们并将它们保存回数据库?