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