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