4

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

<UserControl>
    <StackPanel>
        <TextBlock Text="First Name" />
        <TextBox x:Name="MyTextBox" />
    </StackPanel>
</UserControl>

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

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

但是,这不起作用。似乎数据绑定到用户控件是 XAML UI 的一个有价值的部分。但它是如何实现的?

4

2 回答 2

10

用户控件中只有一种属性实现支持消费页面中的绑定。那是一个依赖属性。实现很简单,但您还必须包含更改的事件才能直接与 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();
}

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

祝你好运!

于 2013-05-15T19:52:33.200 回答
0

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

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

<TextBox x:Name="MyTextBox" **Text="{Binding TextBoxText, Mode=TwoWay}"** />

不要忘记将 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;
}
于 2013-05-16T06:09:36.740 回答