我进入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并希望通知订户,则显式调用很有用。

10-06 12:05