2010-06-13 11 views
6

w XAML mogę napisać coś takiego:Binding Setter.Value z kodu

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

Jak zrobić to w kodzie? Skonstruowałem wiązania w kodzie wcześniej, ale nie mogę znaleźć żadnego statycznego obiektu ValueProperty na klasie Setter, aby przejść do BindingOperations.SetBinding().

Odpowiedz

12

Podczas ustawiania wiązania na seterze w ogóle nie potrzebujesz funkcji BindingOperations. Wszystko, co musisz zrobić, to:

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

lub równoważnie

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

jeden z nich byłoby równoznaczne z

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

Powodem tego jest to, że działa Setter.Value jest zwykłym CLR własność, a nie DependencyProperty i jako taka nie może być związana. Tak więc nie ma dwuznaczności ani w XAML, ani w kodzie, gdy przechowujesz w nim obiekt Binding.

Po prawidłowym zastosowaniu setera do obiektu, jeśli w seter znajduje się wiązanie, wywoływany jest odpowiednik opcji BindingOperations.SetBinding. W przeciwnym razie właściwość jest ustawiana bezpośrednio.

+0

Ah, dzięki za wyczyszczenie tego. Wydało mi się dziwne, że w Seterze nie było ValueProperty, ale nigdy nie myślałem o ustawieniu wartości * na * obiekt wiążący. :) Pozdrawiam Raya - bardzo mi ostatnio pomagałeś. ;) – devios1