实现INotifyPropertyChanged-是否存在更好的方法?

实现INotifyPropertyChanged-是否存在更好的方法?,第1张

实现INotifyPropertyChanged-是否存在更好的方法?

在不使用postsharp之类的情况下,我使用的最低版本使用的是:

public class data: INotifyPropertyChanged{    // boiler-plate    public event PropertyChangedEventHandler PropertyChanged;    protected virtual void onPropertyChanged(string propertyName)    {        PropertyChangedEventHandler handler = PropertyChanged;        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));    }    protected bool SetField<T>(ref T field, T value, string propertyName)    {        if (EqualityComparer<T>.Default.Equals(field, value)) return false;        field = value;        onPropertyChanged(propertyName);        return true;    }    // props    private string name;    public string Name    {        get { return name; }        set { SetField(ref name, value, "Name"); }    }}

那么每个属性就像:

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

这不是很大;如果需要,它也可以用作基类。在

bool
从回
SetField
告诉你,如果它是一个空 *** 作,如果你想申请其他逻辑。


甚至更容易使用C#5:

protected bool SetField<T>(ref T field, T value,    [CallerMemberName] string propertyName = null){...}

可以这样称呼

set { SetField(ref name, value); }

编译器将使用它

"Name"
自动添加。


C#6.0使实现更容易:

protected void onPropertyChanged([CallerMemberName] string propertyName = null){    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}

…现在使用C#7:

protected void onPropertyChanged(string propertyName)   => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));protected bool SetField<T>(ref T field, T value,[CallerMemberName] string propertyName =  null){    if (EqualityComparer<T>.Default.Equals(field, value)) return false;    field = value;    onPropertyChanged(propertyName);    return true;}private string name;public string Name{    get => name;    set => SetField(ref name, value);}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5559884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存