预期的 ObservableCollection +NotifyPropertyChanged
-
18-09-2019 - |
题
问候,我有一些类型的cmessage对象列表。CMessage 可以如下所示:
public ROWGUID {get;set;}
public ObservableCollection<CAnswer> Answers
{
get {return _Answer;}
set
{_Answer=value
RaisePropertyChanged("Answer");
}
}
每个属性都有 RaiseNotifyPropertyChanged 方法,该方法是 INotifyPropertyChanged 接口的实现。重点是:
- 我从 ObservableCollection 消息列表中选择一些消息;
- 我向选定的消息添加一些答案
为什么没有对该消息执行 RaisePropertyChanged?它应该!
解决方案
你正在这样做:
// 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 事件。第二个更改了答案集合,这将导致您 set
方法来触发,这会引发 CMessage 类的 PropertyChanged 事件。
顺便说一句,你这样做是错误的。您不应该让人们设置您的收藏属性。这不是最佳实践,允许将属性设置为 null(这很糟糕)等。您应该只有只读属性集合。如果用户对属性更改感兴趣,他们应该订阅属性的 CollectionChanged 事件。
不隶属于 StackOverflow