c# - INotifyPropertyChanged 的​​ OnPropertyChanged 参数

标签 c# wpf mvvm inotifypropertychanged

我正在进入 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,反之亦然?

最佳答案

由于 [CallerMemberName] 属性,OnPropertyChanged(); 调用将自动获取调用它的类成员的名称。

OnPropertyChanged(nameof(Name)); 显式地将属性名称作为输入参数发送到该方法。

因此在您的情况下,这两个调用将导致完全相同的 PropertyChanged 调用。

但如果您在方法或类似的东西中更改 _name 并希望通知订阅者,则显式调用很有用。

关于c# - INotifyPropertyChanged 的​​ OnPropertyChanged 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36459035/

相关文章:

c# - 类的类型为空

c# - IQueryable OfType<T> 其中 T 是运行时类型

c# - HTTPS 代理实现 (SSLStream)

wpf - 在 WPF 中重新创建 WinForms 布局

c# - 如果选择列表项,则实现 CanExecute 以启用按钮

c# - 基于具有删除按钮的数据类型的 Listview 项目

c# - C#-异步服务器与同步服务器-套接字

c# - "Core"作为成员名后缀的含义

c# - TextBlock 的绑定(bind)标签

WPF - ItemTemplate 未按预期运行