如何绑定到用户控件的属性?

在Windowsapp store应用中,您可以创建用户控件来封装和重用代码隐藏和布局XAML。 简单的用户控件可能如下所示:

      

现在,我想设置绑定。 因此,我创建了具有公开UI控件的Text属性的属性的代码隐藏。 像这样的东西:

 public string TextBoxText { get { return MyTextBoxText.Text; } set { MyTextBoxText.Text = value; } } 

但是,这不起作用。 似乎绑定到用户控件的数据是XAML UI的重要组成部分。 但它是如何完成的?

用户控件中只有一个属性实现支持在使用页面中进行绑定。 这是一个依赖属性。 实现很简单,但您还必须包含已更改的事件以直接与UI交互,因为依赖项属性是控件上的静态属性。 像这样:

 public string TextBoxText { get { return (string)GetValue(TextBoxTextProperty); } set { SetValue(TextBoxTextProperty, value); } } public static readonly DependencyProperty TextBoxTextProperty = DependencyProperty.Register("TextBoxText", typeof(string), typeof(MyUserControl), new PropertyMetadata(string.Empty, OnTextBoxTextPropertyChanged)); private static void OnTextBoxTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as MyUserControl).MyTextBox.Text = e.NewValue.ToString(); } 

我承认,这不是很明显。 但希望现在你知道,这将节省你数小时的搜索和试图弄清楚。 同样,您只能绑定到用户控件的依赖项属性。 而且,您只能使用更改的事件从静态线程设置UI值。

祝你好运!

你总是谈论绑定 – 但你实际上并没有将textbox.textproperty绑定到你的属性(你设置它)。

如果您想使用绑定,请创建依赖项属性并以这种方式绑定文本框的text-property:

  

不要忘记将usercontrols DataContext属性设置为usercontrol-instance:

 public MyUserControl1() { this.InitializeComponent(); // Set the datacontext to the usercontrol-instance. // If you don't, the binding will use the usercontrol's parent-datacontext. this.DataContext = this; }