2010-06-13 9 views
6

In XAML kann ich so etwas schreiben:Bindung Setter.Value von Code

<Setter Property="PropertyName" Value="{Binding ...}" /> 

Wie würde ich dies tun in Code? Ich habe zuvor Bindings in Code erstellt, aber ich kann anscheinend kein statisches ValueProperty Objekt in der Klasse Setter finden, das an BindingOperations.SetBinding() übergeben wird.

Antwort

12

Wenn Sie eine Bindung für einen Setter festlegen, benötigen Sie überhaupt keine BindingOperations. Alles, was Sie tun müssen, ist:

var setter = new Setter(TextBlock.TextProperty, new Binding("FirstName")); 

oder

var setter = new Setter 
{ 
    Property = TextBlock.TextProperty, 
    Value = new Binding("FirstName"), 
}; 

äquivalent entweder davon ist dies funktioniert auf

<Setter Property="TextBlock.Text" Value="{Binding FirstName}" /> 

Der Grund gleichwertig wäre, dass Setter.Value ein gewöhnlicher CLR Eigenschaft, keine DependencyProperty und kann daher nicht gebunden werden. Es gibt also keine Unklarheit in XAML oder Code, wenn Sie ein Binding-Objekt darin speichern.

Wenn der Setter tatsächlich auf ein Objekt angewendet wird und eine Bindung im Setter gefunden wird, wird das Äquivalent von BindingOperations.SetBinding aufgerufen. Andernfalls wird die Eigenschaft direkt festgelegt.

+0

Ah, danke, dass du das geklärt hast. Es erschien mir seltsam, dass es in Setter keine ValueProperty gab, aber ich habe nie daran gedacht, den Wert * auf * ein Binding-Objekt zu setzen. :) Cheers Ray - du hast mir in letzter Zeit sehr geholfen. ;) – devios1