2010-06-13 15 views
6

In XAML posso scrivere qualcosa del genere:Setter.Value rilegatura dal codice

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

Come dovrei fare questo in codice? Ho già creato associazioni nel codice, ma non riesco a trovare alcun oggetto statico ValueProperty sulla classe Setter da passare a BindingOperations.SetBinding().

risposta

12

Quando si imposta un'associazione su un Setter non è necessario BindingOperations. Tutto quello che dovete fare è:

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

o equivalentemente

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

uno di questi sarebbe equivalente a

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

Il motivo per cui funziona è che Setter.Value è un normale CLR proprietà, non DependencyProperty e come tale non può essere associato. Quindi non c'è ambiguità né nell'XAML né nel codice quando si memorizza un oggetto Binding in esso.

Quando l'incastonatore viene effettivamente applicato a un oggetto, se viene trovato un rilegatura nell'incastonatore, viene chiamato l'equivalente di BindingOperations.SetBinding. In caso contrario, la proprietà viene impostata direttamente.

+0

Ah, grazie per averlo chiarito. Mi è sembrato strano che non ci fosse ValueProperty in Setter, ma non ho mai pensato di impostare il valore * su * un oggetto Binding. :) Ciao Cheers - mi hai aiutato molto ultimamente. ;) – devios1