绑定到UserControl DependencyProperty
我创建了一个带有一些DependencyProperties的UserControl(在这个例子中只有一个字符串属性)。 当我实例化Usercontrol时,我可以设置UserControl的属性,并按预期显示。 当我尝试通过Binding替换静态文本时,不显示任何内容。
我的UserControl如下所示:
守则背后是:
namespace TestUserControBinding { public partial class MyUserControl : UserControl { public MyUserControl() { InitializeComponent(); this.DataContext = this; } public static readonly DependencyProperty MyTextProperty = DependencyProperty.Register( "MyText", typeof(string), typeof(MyUserControl)); public string MyText { get { return (string)GetValue(MyTextProperty); } set { SetValue(MyTextProperty, value); } }// MyText } }
当我在MainWindow中尝试这个时,一切都如预期:
但这不起作用:
标签的行为是正确的,因此属性“文本”没有问题
我的错是什么? 我思考了几个小时,但找不到任何我忘记的东西。
在UserControl
使用以下绑定:
我不确定如何直接将文本设置为MyText属性。 您必须在UserControl
上设置DataContext
才能使其正常工作。
无论如何,这个绑定是问题 – 因为我理解您的场景,您不希望绑定到UserControl
的DataContext
,因为它不一定具有MyText属性。 您希望绑定到UserControl
本身,特别是您创建的DependencyProperty
。 为此,您需要使用RelativeSource
绑定,如下所示:
这将向上导航可视树到MyUserControl,然后在那里找到MyText属性。 它不依赖于DataContext
,它将根据您放置UserControl
位置而改变。
在这种情况下, local
指的是您需要在UserControl
定义的命名空间:
你的第二个例子应该在那一点上起作用。