当实现`INotifyPropertyChanged`时,`PropertyChanged`应该只在`n != value`时被调用,还是因为调用了`set`而被调用呢?
我在这里寻找的是一个行业标准建议(如果存在的话),哪种实现方式更好以及原因。
示例1-展示了一种“愚蠢”的事件触发策略。
我在这里寻找的是一个行业标准建议(如果存在的话),哪种实现方式更好以及原因。
示例1-展示了一种“愚蠢”的事件触发策略。
class Person : INotifyPropertyChanged
{
private string name;
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get
{
return name;
}
set
{
name = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Name)));
}
}
}
使用案例示例1
Person p = new Person();
p.Name = "John"; // ProperyChanged fired
p.Name = "John"; // ProperyChanged fired
示例2 - 展示了一种“聪明”的事件触发策略
class Person : INotifyPropertyChanged
{
private string name;
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get
{
return name;
}
set
{
if(name != value)
{
name = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Name)));
}
}
}
}
使用案例示例2
Person p = new Person();
p.Name = "John"; // ProperyChanged fired
p.Name = "John"; // ProperyChanged ignored as name == value
请注意示例2中的if(name != value)
,它只允许值的更改,并在传入的值与现有值不匹配时触发ProperyChanged
事件。