绑定到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才能使其正常工作。

无论如何,这个绑定是问题 – 因为我理解您的场景,您不希望绑定到UserControlDataContext ,因为它不一定具有MyText属性。 您希望绑定到UserControl本身,特别是您创建的DependencyProperty 。 为此,您需要使用RelativeSource绑定,如下所示:

  

这将向上导航可视树到MyUserControl,然后在那里找到MyText属性。 它不依赖于DataContext ,它将根据您放置UserControl位置而改变。

在这种情况下, local指的是您需要在UserControl定义的命名空间:

  

你的第二个例子应该在那一点上起作用。