2009-04-27 11 views
7

Ich muss alle Bindungen auf meinem Benutzersteuerelement aktualisieren, wenn die Sichtbarkeit in Sichtbar geändert wird. So ziemlich alle meine Bindungen an das Datacontext-Eigenschaft des Benutzersteuer gebunden so versuche ich, das Ziel dieser Bindung zu aktualisieren:Alle Bindungen in UserControl auf einmal aktualisieren

BindingOperations.GetBindingExpressionBase(this, UserControl.DataContextProperty).UpdateTarget(); 

Aber ich bekomme null als Ergebnis der GetBindingExpression(..) Methode und ich frage mich, wenn ich das falsch benutze.

Gibt es auch eine andere gute Möglichkeit, alle Bindungen auf dem Steuerelement (die DataContext als Quelle verwenden) zu aktualisieren.

Antwort

15

Nun, man könnte gerade neu ordnen die DataContext:

var dataContext = DataContext; 
DataContext = null; 
DataContext = dataContext; 

FYI, wird die Eigenschaft auf den Wert (das heißt DataContext = DataContext) Zurücksetzen nicht funktionieren.

+0

OMG, du bist ein Genie! Warum, warum habe ich nicht daran gedacht ?! Danke, das hat funktioniert :) – Alexandra

+2

Gibt es eine anmutige WPF'y Art, dies zu tun? Sollte WPF nicht eine Art bindender Aktualisierungsmechanismus unterstützen? – BrettRobi

+2

Das Merkwürdigste ist, dass ohne die zweite Zeile die Aktualisierung nicht stattfindet. Unabhängig davon, wie Sie die DataContext-Eigenschaft mischen, wird nichts angezeigt, es sei denn, sie ist auf null gesetzt. Danke für die hilfreiche Antwort. – EFraim

1

Sie verwenden die BindingOperations.GetBindingExpressionBase-Methode für die falsche Eigenschaft. Sie müssen es für die Eigenschaften verwenden, die an die DataContext-Eigenschaft gebunden sind, nicht an die DataContext-Eigenschaft.