一个比另一个好吗?有没有最佳实践的notifypperty?
方法1:
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
方法2:
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
我主要对"([CallerMemberName]"在第二种方法中感到困惑,我不知道它做了什么,我认为它为没有呼叫添加空字符串一个字符串/ null,所以我应该主要使用第二个,因为它有更广泛的用途?
答案 0 :(得分:4)
如果可选的string
参数标记为[CallerMemberName]
,则编译器会提供调用成员的名称。所以:
public string Foo {
get { ... }
set { ...; OnPropertyChanged(); }
}
自动提供"Foo"
,为您省去显式指定成员名称带来的轻微不便。
答案 1 :(得分:3)
您可以使用
CallerMemberName
属性来避免将成员名称指定为被调用方法的String
参数。通过使用此技术,您可以避免重命名重构不会更改String
值的问题。这对以下任务特别有用:
- 使用跟踪和诊断程序。
- 绑定数据时实现INotifyPropertyChanged接口。此接口允许对象的属性通知绑定控件属性已更改,以便控件可以显示更新的信息。如果没有
CallerMemberName
属性,则必须将属性名称指定为文字。