Как прослушать Binding.SourceUpdated на всех дочерних элементах корневого элемента? - PullRequest
6 голосов
/ 20 августа 2011

Я хочу прослушать Binding.SourceUpdated для всех определенных дочерних привязок.

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.sourceupdated.aspx говорит

Установите свойство NotifyOnTargetUpdated или NotifyOnSourceUpdated (или оба) в значениеправда в обязательном порядке.Обработчик, который вы предоставляете для прослушивания этого события, должен быть присоединен непосредственно к элементу, где вы хотите получать информацию об изменениях, или к общему контексту данных, если вы хотите знать, что что-то в контексте изменилось.

Это означает, что мы должны иметь возможность прослушивать эти события по DataContext, а не по элементу Binding.

1 Ответ

8 голосов
/ 20 августа 2011

Как и большинство событий WPF, SourceUpdated - это Routed Event.Любой обработчик этого события, помещенный в данный элемент, также будет вызываться, когда дочерний элемент вызывает это событие.

Если у вас есть следующий код:

<StackPanel Binding.SourceUpdated="OnBindingSourceUpdated">
  <TextBlock Text="{Binding Path=A, NotifyOnSourceUpdated=True}" />
  <TextBlock Text="{Binding Path=B, NotifyOnSourceUpdated=True}" />
</StackPanel>

Обработчик OnBindingSourceUpdatedбудет обрабатывать изменения источника привязки для обоих текстовых полей.Поместите прикрепленный обработчик событий в элемент, где изначально определен контекст данных, и вы будете получать уведомления о каждом изменении источника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...