INotifyPropertyChanged和一致性 - 何时提升PropertyChanged?

时间:2014-04-02 08:07:09

标签: .net inotifypropertychanged

我有一个实现INotifyPropertyChanged的类。它有两个属性,它们的值彼此相关,例如,一个人的名字和姓氏。如果更新了一个属性,则另一个属性也需要更新。为了传达这一点,我将setter设为私有,并添加了一个公共方法来同时更改这两个属性。

我的问题是,是否有关于何时提出PropertyChanged事件的规则或约定?我想延迟提升两个属性的事件,直到状态完全更新并且我的对象的状态是一致的。但是,我不知道这是否会让人感到意外,从而给我的代码用户带来麻烦,或者可能会把某些库代码混淆在一起。

更新

documentation的另一种看法揭示了以下内容:

  

PropertyChanged事件可以通过使用null或String.Empty作为PropertyChangedEventArgs中的属性名来指示对象上的所有属性都已更改。

这可能会解决我的特定问题,但如果对象上有很多属性,它似乎不是一个通用的解决方案。

但是,我的问题仍然有效:我们是否立即提出PropertyChanged,或者在某些情况下我们是否应该等待一段时间。

1 个答案:

答案 0 :(得分:0)

当对象处于一致状态时,应该引发PropertyChanged事件。如果更新了两个属性,则应在两个属性更新后引发事件。 “等待一点”并没有多大意义 - 你是否打算使用计时器等待一段时间(比如说100毫秒)?

根据您的属性更改通知,您希望看到一致的对象。 E.g:

public void SetFullName(String fullName) {
  // Naïve implementation.
  var names = fullName.Split(new[] { ' ' }, 2);
  FirstName = names[0];
  LastName = names[1];
  OnPropertyChanged("FirstName");
  OnPropertyChanged("LastName");
}