【问题标题】:Custom WPF Control Dependency Property Not Binding to external DP自定义 WPF 控件依赖属性未绑定到外部 DP
【发布时间】:2009-11-05 16:02:48
【问题描述】:

我正在努力使这篇文章简短易读。 我正在创建一个自定义控件,该控件在代码隐藏中定义了一个 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”绑定到我的视图模型上的另一个 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 的视图模型,我可以确认该值实际上永远不会被绑定更新。

我不知道我做错了什么。 提前感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

    尝试将 RandomNumber 设为 BindsTwoWayByDefault:

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

    【讨论】:

    • 你很快 - 你很准确 - 你是......你是我的 heeero :) 感谢您的快速回复 - 这非常有效!
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 2010-12-27
    • 2012-08-07
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多