Поскольку я точно знаю, когда я изменяю эти объекты, я хотел бы иметь механизм для обновления всех элементов управления пользовательского интерфейса, когда я делаю это.
Вы найдете, что наиболее простой иСопровождаемый способ справиться с этим - реализовать классы модели представления для каждого класса, который вы хотите представить в пользовательском интерфейсе.Это, вероятно, верно, если вы можете изменить базовые классы, и почти наверняка верно, если вы не можете.
Вам не нужно использовать свойства зависимостей для этого.Свойства зависимостей необходимы только для target привязки, то есть элементов управления в пользовательском интерфейсе.Ваши объекты модели представления являются источником;им нужно только реализовать INotifyPropertyChanged
.
Да, это означает, что вам нужно будет создавать классы, которые содержат свойство для каждого свойства, представленного в пользовательском интерфейсе, и что эти классы должны будут содержать наблюдаемые коллекции дочернего представления.модели, и вам придется создавать и заполнять эти классы и их коллекции во время выполнения.
Как правило, это не так важно, как кажется, и может быть даже меньше, чем в вашем случае.Традиционный способ построения модели представления, привязанной к модели данных, состоит в создании таких свойств:
public string Foo
{
get { return _Model.Foo; }
set
{
if (value != _Model.Foo)
{
_Model.Foo = value;
OnPropertyChanged("Foo");
}
}
}
Но если, как вы заявили, вы знаете, когда обновляются объекты, и выпросто хотите отправить обновления в пользовательский интерфейс, вы можете реализовать свойства только для чтения, а когда базовая модель данных будет обновлена, заставить модель представления поднять PropertyChanged
со свойством PropertyName
аргументов события, равным нулю, чтоговорит привязке: «Каждое свойство этого объекта изменилось; обновите все цели привязки».