我正在尝试在XAML中为一个依赖属性进行数据绑定,但一直失败。当我使用代码后台时,它可以正常工作,但是在XAML中却不行。
用户控件只是一个绑定到该依赖属性的。
<UserControl x:Class="WpfTest.MyControl" [...]>
<TextBlock Text="{Binding Test}" />
</UserControl>
依赖属性是一个简单的字符串:
public static readonly DependencyProperty TestProperty
= DependencyProperty.Register("Test", typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));
public string Test
{
get { return (string)GetValue(TestProperty); }
set { SetValue(TestProperty, value); }
}
我在主窗口中有一个常规属性,并使用通常的INotifyPropertyChanged
实现。
private string _myText = "default";
public string MyText
{
get { return _myText; }
set { _myText = value; NotifyPropertyChanged(); }
}
目前为止一切都很好。如果我将这个属性绑定到主窗口上的 TextBlock
,一切都能正常工作。如果MyText
发生更改,则文本会正确更新,世界也平静了。
<TextBlock Text="{Binding MyText}" />
然而,如果我在我的用户控件上做同样的事情,什么也不会发生。
<local:MyControl x:Name="TheControl" Test="{Binding MyText}" />
现在有趣的部分是,如果我在代码后端执行完全相同的绑定,它就能起作用!
TheControl.SetBinding(MyControl.TestProperty, new Binding
{
Source = DataContext,
Path = new PropertyPath("MyText"),
Mode = BindingMode.TwoWay
});
为什么在XAML中它不能工作?
DataContext
都设置为this
。 - OliverRegisterAttached
。不幸的是它也没有起作用。 - Oliver