2010-04-16 10 views
16

Wie kann ich meine Objekte Datacontext Bindungen aktualisieren erzwingen? Ich verwende ein Ereignis in einem Raster, und verbindliche Aktualisierungen werden nicht verarbeitet, bevor mein Ereignis ausgelöst wird.Force-Binding-Update Silverlight

Alle billige Tricks, dies zu umgehen? Am Ende kann ich immer Dinge, die alte manuelle Art und Weise tun, um die Werte aus meinem area per zu bekommen und mein Objekt zu aktualisieren, aber es wäre schön, verbindlich zu haben, es für mich tun.

UPDATE

Mein Gitter enthält zwei Textfelder. Wenn ein Benutzer auf das Raster klickt (MouseButtonUp-Ereignis), speichere ich die Änderungen. Aber in meinem MouseButtonUp-Ereignishandler ist der Datenkontext noch nicht auf dem neuesten Stand. Ich könnte mir vorstellen, dass ein Textfeld nur aktualisiert wird, wenn der Fokus verloren geht.

Antwort

31

können Sie erzwingen eine Aktualisierung der Quelle eine Bindung durch die Update() aufrufen methond auf die Bindung an. Versuchen Sie, es unmittelbar vor dem Speichern zum MouseButtonUp-Ereignishandler hinzuzufügen.

Wie so:

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

können Sie weitere Informationen zu diesem auf MSDN finden: http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression.updatesource(VS.95).aspx

+0

Ich habe es noch nicht ausprobiert, aber ich bin sicher, es wird funktionieren. Vielen Dank. – Matt

+0

Funktioniert wie ein Charme. – grabah

0

Alternativly Sie TextInput- Ereignis fangen kann (es wird ausgelöst, wenn der Benutzer drückt innerhalb Textfeld eingeben) und dann Ändern Sie den Fokus auf die zweite TextBox. Wenn Sie den Fokus verlieren, wird der gebundene Wert aktualisiert.