- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我看到了 INotifyPropertyChanged
的两种实现方式
第一个:
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
第二个:
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在第二个中,您会看到方法 OnPropertyChanged
上有一个额外的属性 [NotifyPropertyChangedInvocator]
在我的例子中,两者的行为相同,但是什么、为什么以及何时使用此 [NotifyPropertyChangedInvocator]
,这样做有什么好处?我在互联网上搜索过,但找不到任何好的答案。
最佳答案
这是来自他们的 Annotations 的 Resharper 属性- 旨在给你警告然后你的代码看起来可疑:)
考虑一下:
public class Foo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void NotifyChanged(string propertyName) { ... }
private string _name;
public string Name {
get { return _name; }
set {
_name = value;
NotifyChanged("LastName");//<-- warning here
}
}
}
在 NotifyChanged
方法上使用 [NotifyPropertyChangedInvocator]
属性 Resharper 会给你一个警告,你正在用一个 (大概)错误的值(value)。
因为 Resharper 现在知道应该调用那个方法来发出更改通知,所以它将帮助您将普通属性转换为带有更改通知的属性:
将其转换为:
public string Name
{
get { return _name; }
set
{
if (value == _name) return;
_name = value;
NotifyChange("Name");
}
}
此示例来自此处找到的关于 [NotifyPropertyChangedInvocator]
属性的文档:
关于c# - 实现 INotifyPropertyChanged 时,C# 中的 [NotifyPropertyChangedInvocator] 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23213146/
我看到了 INotifyPropertyChanged 的两种实现方式 第一个: public abstract class ViewModelBase : INotifyPropertyChange
我是一名优秀的程序员,十分优秀!