在不使用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);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)