3

CallerMemberName在一个类的实现中使用了该属性,INotifyPropertyChangedMSDN中所述,如下所示:

    public event PropertyChangedEventHandler PropertyChanged;

    // This method is called by the Set accessor of each property.
    // The CallerMemberName attribute that is applied to the optional propertyName
    // parameter causes the property name of the caller to be substituted as an argument.
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

但是,使用默认参数不符合 CLS。但是CallerMemberName只能与具有默认值的参数一起使用...有没有一种常用的方法来解决这种不一致,而无需使用硬编码的字符串参数调用 notify 方法?

4

1 回答 1

1

我只是简单地删除了CallerMemberName属性和默认参数值,这意味着参数不再是可选的,因此方法签名变为:

private void NotifyPropertyChanged(String propertyName)

nameof然后使用提供字符串参数的运算符调用它是一个很小(足够)的更改:

NotifyPropertyChanged(nameof(FooProperty));

这似乎工作得很好。

我将把这个问题留一会儿,因为其他人可能有更好的方法,或者提出这个解决方案的问题。

于 2017-08-04T09:59:18.477 回答