0

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

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

}

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

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

为什么没有为该消息执行 RaisePropertyChanged?它应该!

4

1 回答 1

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 事件。第二个更改将导致您的set方法触发的 Answers 集合,从而引发 CMessage 类的 PropertyChanged 事件。

BTW, you're doing this wrong. You shouldn't let people set your collection property. It isn't a best practice, allows the property to be set to null (which is bad), etc. You should only have read-only property collections. If users are interested in the property changing they should subscribe to the CollectionChanged event of your property.

于 2010-02-05T14:57:04.793 回答