2010-04-16 1 views
16

Jak mogę wymusić aktualizację powiązań danych obiektów DataContext? Używam zdarzenia na siatce, a aktualizacje powiązania nie są przetwarzane przed uruchomieniem zdarzenia.Aktualizacja wiązania Force Silverlight

Jakieś tanie sztuczki, aby to obejść? W końcu mogę zawsze robić rzeczy w starym ręcznym sposobie pobierania wartości z moich pól tekstowych i aktualizowania mojego obiektu, ale byłoby mi miło, gdyby było to dla mnie wiążące.

UPDATE

Moja siatka zawiera dwa pola tekstowe. Jeśli użytkownik kliknie na siatkę (zdarzenie MouseButtonUp), wówczas zapiszę zmiany. Ale w mojej procedurze obsługi zdarzeń MouseButtonUp datacontext nie jest jeszcze aktualny. Wyobrażam sobie, że to dlatego, że pole tekstowe aktualizuje się tylko, gdy utracisz ostrość.

Odpowiedz

31

Można wymusić aktualizację źródła powiązania, wywołując metodę UpdateSource() w powiązaniu. Spróbuj dodać go do obsługi zdarzenia MouseButtonUp tuż przed zapisaniem.

tak:

BindingExpression binding = FirstTextBox.GetBindingExpression(TextBox.TextProperty) 
if (null != binding) binding.UpdateSource(); 

można znaleźć więcej informacji na ten temat na MSDN: http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression.updatesource(VS.95).aspx

+0

Nie próbowałem jeszcze, ale jestem pewien, że to zadziała. Dziękuję Ci. – Matt

+0

Działa jak urok. – grabah

0

Alternativly można złapać zdarzenie TextInput (będzie ognia, gdy użytkownik naciśnie klawisz Enter pole tekstowe wewnątrz) a następnie zmienić ostrość na drugi tekstBox. utrata ostrości zaktualizuje wartość wiązania.