Waq*_*ees 37 c# wpf c#-5.0 windows-phone-8 windows-8.1
我看到两种类型的实现 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));
}
}
}
Run Code Online (Sandbox Code Playgroud)第二个:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)在第二个中,您会看到[NotifyPropertyChangedInvocator]该方法有一个额外的属性OnPropertyChanged
在我的情况下,两者都表现相同但是什么,为什么以及何时使用它[NotifyPropertyChangedInvocator],这有什么好处?我在网上搜索过但找不到任何好的答案.
Jen*_*ter 71
它是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
}
}
}
Run Code Online (Sandbox Code Playgroud)
随着方法的[NotifyPropertyChangedInvocator]归属,Resharper会给你一个警告,你正在调用带有(大概)错误值的方法.
因为Resharper现在知道应该调用该方法来进行更改通知,它将帮助您将常规属性转换为具有更改通知的属性:
NotifyChanged
将其转换为:
public string Name
{
get { return _name; }
set
{
if (value == _name) return;
_name = value;
NotifyChange("Name");
}
}
Run Code Online (Sandbox Code Playgroud)
此示例来自[NotifyPropertyChangedInvocator]此处找到的属性的文档:

这NotifyPropertyChangedInvocator是Reshaper 的一项功能。
您只需将其从代码中删除即可使其正常工作
类似的问题在这里被问到:
有谁知道如何获取 [NotifyPropertyChangedInvocator]
| 归档时间: |
|
| 查看次数: |
19614 次 |
| 最近记录: |