我进入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]属性,call将自动获取调用它的类成员的名称.
OnPropertyChanged(nameof(Name));显式地将属性名称作为输入参数发送到方法.
因此,在您的情况下,两次调用将导致完全相同的PropertyChanged调用.
但是,如果在方法中更改_name或类似的东西,并且希望通知订阅者,则显式调用很有用.
相关文章
- c# - 为什么OnPropertyChanged在Code Behind中不起作用?
- c# - 更好地触发OnPropertyChanged
- c# - OnPropertyChanged无法按预期使用ObjectListView
- c# - 处理OnPropertyChanged
- c# - 使用INotifyPropertyChanged实现的Strange NullReferenceException
- c# - WPF中的INotifyPropertyChanged
- c# - WCF DataContracts中的INotifyPropertyChanged
- c# - INotifyPropertyChanged数据绑定之外的用法
转载注明原文:c# – INotifyPropertyChanged的OnPropertyChanged参数 - 代码日志