自定义WPF控件依赖项属性未绑定到外部DP

时间:2009-11-05 16:02:49

标签: c# .net wpf data-binding xaml

我正在努力使这个简短易读。 我正在创建一个在代码隐藏中具有DP定义(RandomNumber)的自定义控件。此DP的值是通过我控制中的按钮触发的单击事件设置的。

以下是相关代码:

public partial class Tester 
{
    public int RandomNumber
    {
        get { return (int)GetValue(RandomNumberProperty); }
        set { SetValue(RandomNumberProperty, value); }
    }

    private Random rnd = new Random();
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        RandomNumber = rnd.Next();
    }

点击事件有效并且设置了值,我可以确认它已被更改。我遇到的问题是当我在我的应用程序中使用此控件时,我尝试将“RandomNumber”绑定到我的View Model上的另一个DP,绑定永远不会更新:

 <DockPanel>
    <TextBlock Text="{Binding Path=Numeric}" 
               DockPanel.Dock="Top"
               Height="25"/>
    <TestProject:Tester RandomNumber="{Binding Path=Numeric}" 
                             DockPanel.Dock="Top"
                             Height="25"
                             x:Name="TestControl"/>

</DockPanel>

在上面的示例中,我有一个名为Numeric的DP的视图模型,我可以确认该值实际上永远不会被绑定更新。

我无法弄清楚我做错了什么。 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

在代码中设置RandomNumber时,您的绑定将被覆盖。除非绑定是Mode = TwoWay或者RandomNumber具有元数据BindsTwoWayByDefault,否则这通常是正确的。

尝试将RandomNumber设为BindsTwoWayByDefault:

  public static readonly DependencyProperty RandomNumberProperty =
    DependencyProperty.Register(
      "RandomNumber",
      typeof(int),
      typeof(Tester),
      new FrameworkPropertyMetadata
      {
        BindsTwoWayByDefault = true,
      });