Запуск события PropertyChanged в сложном, вложенном типе в WPF - PullRequest
1 голос
/ 23 апреля 2010

У меня есть класс с именем DataStore и список Department с (ObservableCollection), и у каждого отдела снова есть список Product с. Измененные свойства класса Product также влияют на свойства классов Department и DataStore. Как каждый Product уведомляет Department, которому он принадлежит, и DataStore (который является родительским классом всех), что одно или несколько его свойств изменили свои значения? Пример: продукт имеет свойство NumberSoldToday и является связанным. У Департамента есть свойство TotalNumberOfProductsSold:

public int TotalNumberOfProductsSold
{
  get
  {
    int result = 0;
    foreach(Product p in this.products)
      result += p.NumberSoldToday;
    return result;
  }
}

А в хранилище данных есть свойство TotalProductsSold (для всех отделов):

public int TotalProductsSold
{
  get
  {
    int result = 0;
    foreach(Product p in this.deparments)
      result += p.TotalNumberOfProductsSold;
    return result;
  }
}

Если все эти свойства связаны, а внутреннее свойство изменяется, оно должно каким-то образом уведомить, что значение других 2 также изменилось. Как?

Единственный способ увидеть это - подключить событие PropertyChanged в каждом классе. Это событие также должно срабатывать при удалении, добавлении в коллекцию товаров и отделов соответственно.

Есть ли лучший, более умный способ сделать это?

1 Ответ

1 голос
/ 23 апреля 2010

Вместо того чтобы вычислять значение всякий раз, когда его запрашивают, вы можете установить значение всякий раз, когда что-то, что должно повлиять на него, изменится.В этом случае вы захотите обработать событие this.deparments.CollectionChanged и выполнить там вычисления.Свойство TotalProductsSold будет выглядеть как любое другое свойство с вызовом FireNotifyPropertyChanged("TotalProductsSold") в его установщике ...

...