预期的ObservableCollection + NotifyPropertyChanged

时间:2010-02-05 14:47:53

标签: inotifypropertychanged

问候, 我有一些类型CMessage的对象列表。 CMessage可以如下所示:

public ROWGUID {get;set;}
public ObservableCollection<CAnswer> Answers 
{
get {return  _Answer;}
set 
{_Answer=value
RaisePropertyChanged("Answer");
}

}

每个属性都有RaiseNotifyPropertyChanged方法,它是INotifyPropertyChanged接口的实现。 重点是:

  1. 我从ObservableCollection消息列表中选择了一些消息;
  2. 我在我选择的消息中添加了一些答案
  3. 为什么没有为该消息执行RaisePropertyChanged?它应该!

1 个答案:

答案 0 :(得分:2)

你这样做:

// get some Message from OC<Message> collection Message
var message = Messages.First(); 
message.Answers.Add(new CAnswer { Text = "HURRDURR" }); // add an answer

但是你的CMessage只会在你执行此操作时调用RaisePropertyChanged

var message = Messages.First();
var answers = new ObservableCollection<CAnswer>();
answers.Add(new CAnswer { Text = "LOL" });
message.Answers = answers; // triggers here

第一个引发Answers集合的CollectionChanged事件。第二个更改Answers集合,这将导致您的set方法触发,这会引发CMessage类的PropertyChanged事件。

顺便说一下,你做错了。你不应该让人们设置你的集合属性。这不是最佳实践,允许将属性设置为null(这是坏的)等等。您应该只有只读属性集合。如果用户对房产变更感兴趣,他们应该订阅您房产的CollectionChanged事件。