我有一个实现INotifyPropertyChanged
的类。它有两个属性,它们的值彼此相关,例如,一个人的名字和姓氏。如果更新了一个属性,则另一个属性也需要更新。为了传达这一点,我将setter设为私有,并添加了一个公共方法来同时更改这两个属性。
我的问题是,是否有关于何时提出PropertyChanged事件的规则或约定?我想延迟提升两个属性的事件,直到状态完全更新并且我的对象的状态是一致的。但是,我不知道这是否会让人感到意外,从而给我的代码用户带来麻烦,或者可能会把某些库代码混淆在一起。
更新
对documentation的另一种看法揭示了以下内容:
PropertyChanged事件可以通过使用null或String.Empty作为PropertyChangedEventArgs中的属性名来指示对象上的所有属性都已更改。
这可能会解决我的特定问题,但如果对象上有很多属性,它似乎不是一个通用的解决方案。
但是,我的问题仍然有效:我们是否立即提出PropertyChanged,或者在某些情况下我们是否应该等待一段时间。
答案 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");
}