2010-06-13 8 views
6

En XAML que puede escribir algo como esto:Setter.Value la encuadernación: código

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

¿Cómo puedo hacer esto en código? He construido enlaces en el código antes, pero parece que no puedo encontrar ningún objeto estático ValueProperty en la clase Setter para pasar al BindingOperations.SetBinding().

Respuesta

12

Al establecer un enlace en un Setter no necesita BindingOperations en absoluto. Todo lo que necesita hacer es:

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

o equivalentemente

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

cualquiera de estos sería equivalente a

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

La razón por la que esto funciona es que es un Setter.Value CLR ordinaria propiedad, no una DependencyProperty y, como tal, no puede vincularse. De modo que no hay ambigüedad ni en el XAML ni en el código cuando almacena un objeto Binding en él.

Cuando Setter se aplica realmente a un objeto, si se encuentra un enlace en Setter, se llama el equivalente de BindingOperations.SetBinding. De lo contrario, la propiedad se establece directamente.

+0

Ah, gracias por aclarar eso. Me pareció extraño que no existiera ValueProperty en Setter, pero nunca pensé simplemente en establecer el valor * en * un objeto vinculante. :) Cheers Ray - últimamente me has estado ayudando mucho. ;) – devios1