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.
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