2011-08-20 2 views
6

Chcę słuchać Binding.SourceUpdated we wszystkich zdefiniowanych powiązaniach dziecka.Jak słuchać Binding.SourceUpdated na wszystkich elementach potomnych elementu głównego?

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.sourceupdated.aspx mówi

Ustawianie NotifyOnTargetUpdated lub NotifyOnSourceUpdated własność (lub oba) na true w wiązaniu. Program obsługi, który chcesz odsłuchać dla tego zdarzenia, musi zostać dołączony bezpośrednio do elementu, w którym chcesz być informowany o zmianach, lub do ogólnego kontekstu danych, jeśli chcesz mieć świadomość, że wszystko w kontekście uległo zmianie.

Oznacza to, że powinniśmy być w stanie nasłuchiwać tego zdarzenia na DataContext zamiast na element Binding.

Odpowiedz

8

Podobnie jak większość zdarzeń WPF, SourceUpdated to Routed Event. Każda funkcja obsługi zdarzeń dla tego wydarzenia umieszczona na danym elemencie zostanie również wywołana, gdy element podrzędny podniesie to zdarzenie.

Jeśli masz następujący kod:

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

handler OnBindingSourceUpdated zajmie wiążących zmian źródłowe dla obu pól tekstowych. Umieść dołączony moduł obsługi zdarzeń na elemencie, w którym pierwotnie zdefiniowano kontekst danych, a otrzymasz powiadomienia o każdej zmianie źródła.