Намеренный ObservableCollection + NotifyPropertyChanged - PullRequest
0 голосов
/ 05 февраля 2010

Привет, У меня есть список объектов типа CMessage. CMessage может выглядеть следующим образом:

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

}

каждое свойство имеет метод RaiseNotifyPropertyChanged, который является реализацией интерфейса INotifyPropertyChanged. Дело в том:

  1. Я выбираю некоторые сообщения из списка сообщений ObservableCollection;
  2. Я добавляю несколько ответов на выбранное сообщение

Почему для этого сообщения не выполняется RaisePropertyChanged? Стоит!

1 Ответ

2 голосов
/ 05 февраля 2010

Вы делаете это:

// 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

Первое вызывает событие CollectionChanged из коллекции Ответов. Вторая изменяет коллекцию «Ответы», что вызывает срабатывание вашего метода set, что вызывает событие PropertyChanged вашего класса CMessage.

Кстати, вы делаете это неправильно. Вы не должны позволять людям устанавливать свойство вашей коллекции. Это не лучшая практика, позволяющая устанавливать для свойства значение null (что плохо) и т. Д. У вас должны быть только коллекции свойств только для чтения. Если пользователи заинтересованы в изменении свойства, им следует подписаться на событие CollectionChanged вашего объекта.

...