我进入MVVM,偶然发现了调用此MWE中显示的OnPropertyChanged
函数的两个版本:
public class SampleModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (value == _name) return;
_name = value;
// Version 1
OnPropertyChanged();
// Version 2
OnPropertyChanged(nameof(Name));
}
}
#region INotifyPropertyChanged members
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
为什么我选择版本1而不选择版本2,反之亦然?
最佳答案
由于OnPropertyChanged();
属性,[CallerMemberName]
调用将自动获取调用它的类成员的名称。OnPropertyChanged(nameof(Name));
明确将属性名称作为输入参数发送到方法。
因此,在您的情况下,这两个调用将导致完全相同的PropertyChanged调用。
但是,如果您使用某种方法或类似方法更改_name
并希望通知订户,则显式调用很有用。