Подтвердить что ты не робот

WPF MVVM - Может ли одно PropertyChanged обновить все привязки данных DataTemplate?

У меня есть класс ViewModel, который имеет большое количество свойств (Say 50). Когда данные будут установлены на все свойства, мне необходимо обновить интерфейс. Я знаю, что общее решение заключается в том, чтобы поднять PropertyChanged на всех средствах настройки свойств.

Мне интересно, можно ли каким-либо образом уведомить мой DataTemplate о том, как обновить все его привязки с помощью одного уведомления? Одна идея состоит в том, чтобы иметь свойство IsLoaded, которое повышает свойство, но как я могу использовать его для обновления всего DataTemplate. Меня интересует общее решение XAML.

4b9b3361

Ответ 1

Наконец, у меня есть ответ от моего коллеги Josh Smith, это очень просто, нам просто нужно поднять событие PropertyChanged с помощью null или String.Empty как имя свойства. который скажет системе привязки WPF переоценку всех привязок этого объекта. При использовании этого я получаю два основных преимущества.

  • Накладные расходы на сбор отдельных событий на каждом свойстве сводятся к одному событию из View-Model в пользовательский интерфейс. Представление будет увеличиваться.
  • При написании кода мы можем просто использовать синтаксис {get; set;}, который является чистым и менее написание

Успение. Как и в вопросе, который я предположил здесь, это очень особое условие, при котором все мои свойства обновляются одновременно

У меня есть blogpost, обсуждающий это здесь

Обновление: на основе комментария от kek444

Ответ 2

Я не думаю, что эта проблема стоит попробовать. То есть, я думаю, что решение здесь заключается в том, чтобы отдельные свойства отправляли уведомления об изменении свойств по мере их установки. Если нет, что вы собираетесь делать, когда изменяется индивидуальное свойство (но не обязательно все пятьдесят)?

Ответ 3

Вы прочитали эту статью доктором WPF? http://drwpf.com/blog/Home/tabid/36/EntryID/42/Default.aspx

Прочтите это очень внимательно. Это хорошая статья, просто нужно перечитать несколько раз. Возможно ли, что IEditableObject является ответом на ваш вопрос?