【问题标题】:Intended ObservableCollection +NotifyPropertyChanged预期的 ObservableCollection +NotifyPropertyChanged
【发布时间】:2010-02-05 14:47:53
【问题描述】:

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

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

}

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

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

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

【问题讨论】:

    标签: inotifypropertychanged


    【解决方案1】:

    你正在这样做:

    // 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 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多