2010-06-13 3 views
6

En XAML je peux écrire quelque chose comme ceci:Reliure Setter.Value à partir du code

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

Comment pourrais-je faire cela dans le code? J'ai déjà construit des liaisons dans le code, mais je n'arrive pas à trouver un objet ValueProperty statique sur la classe Setter pour passer à BindingOperations.SetBinding().

Répondre

12

Lors du réglage de liaison sur un Setter vous n'avez pas besoin BindingOperations du tout. Tout ce que vous devez faire est:

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

ou équivalente

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

ou l'autre de ces équivaudrait à

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

La raison pour laquelle cela fonctionne est que Setter.Value est un CLR ordinaire propriété, pas un DependencyProperty et en tant que tel, il ne peut pas être lié. Il n'y a donc aucune ambiguïté dans le code XAML ou le code lorsque vous stockez un objet Binding dans celui-ci.

Lorsque le Setter est effectivement appliquée à un objet, si une liaison se trouve dans le Setter, l'équivalent de BindingOperations.SetBinding est appelé. Sinon, la propriété est définie directement.

+0

Ah, merci de l'avoir clarifié. Il m'a paru étrange qu'il n'y avait pas ValueProperty dans Setter, mais je n'ai jamais pensé à simplement définir la valeur * à * un objet Binding. :) Cheers Ray - vous m'avez beaucoup aidé ces derniers temps. ;) – devios1