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

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

}

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

  1. 我从 ObservableCollection 消息列表中选择一些消息;
  2. 我向选定的消息添加一些答案

为什么没有对该消息执行 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 事件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top