Установите свойство BindingBase как обязательное в XAML

#c# #wpf #xaml #binding

#c# #wpf #xaml #привязка

Вопрос:

У меня есть BindingBase свойство в коде, лежащем в основе:

 public BindingBase MyBinding { get; set; }
  

В исходном коде я могу установить привязку к DependencyProperty таким образом:

 myTextBlock.SetBinding(TextBlock.TextProperty, MyBinding);
  

Есть ли какой-либо способ определить его в XAML?

Я пробовал это, но это не работает:

 <TextBlock Text="{Binding MyBinding}" />
  

поскольку он пытается создать новую привязку к MyBinding свойству.

Комментарии:

1. Это не работает, потому что привязка должна быть определена между свойствами. В вашем случае между текстом свойства в текстовом поле и некоторым MyProperty в вашей модели представления, в то время как вы пытаетесь привязать свойство к привязке.

2. «У меня есть в коде свойство BindingBase», вот где начинаются ваши проблемы. Почему у вас вообще есть такое свойство?

3. Может быть, вы хотите найти руководство по шаблону MVVM.

4. @Clemens, чтобы иметь возможность определять привязку, когда я помещаю свой UserControl в свой Window XAML и использую эту привязку в DataTemplate в моем UserControl . Точно так же, как в GridViewColumn.DisplayMemberBinding .

5. С той существенной разницей, что DisplayMemberBinding (и другие подобные свойства) являются целью, а не источником выражения привязки XAML.

Ответ №1:

Ваши Source и Target должны быть одного типа или лучше использовать Convertor .

TextBlock.Text это строка, и вы привязываете ее к Binding типу. Итак, ToString() будет вызван.

И если вы хотите имитировать то, что вы сделали в своем коде, то вам нужно создать отдельный класс, например public class CustomBinding : BindingBase .

И используйте его следующим образом :

 <TextBlock>
    <TextBlock.Text>
        <local:CustomBinding>
            ...
        </local:CustomBinding>
    </TextBlock.Text>
</TextBlock>