c# - 自定义 WPF 控件依赖属性未绑定(bind)到外部 DP

标签 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”绑定(bind)到我的 View 模型上的另一个 DP 时,绑定(bind)永远不会更新:

 <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 的 View 模型,我可以确认该值实际上从未被绑定(bind)更新。

我不知道我做错了什么。 在此先感谢您的帮助!

最佳答案

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

尝试将 RandomNumber 设为 BindsTwoWayByDefault:

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

关于c# - 自定义 WPF 控件依赖属性未绑定(bind)到外部 DP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1681546/

相关文章:

VB 解决方案中的 C# 类库不导入

c# - 有条件地继续等待任务的一件事

.net - 在 .net 中强制继承

c# - 如何将组合框选择更改值与列表框项绑定(bind)?

c# - 在 IEnumerable<dynamic> 上使用 LINQ 时出现编译器错误,但如果先将其转换为 IEnumerable<dynamic> 则不会

c# - 用数据库查询结果填充列表框

javascript - 检测虚拟MAC地址?

c# - Combobox 只显示一些comboxitems

wpf - 防止 parent 被 child 调整大小

c# - 如何在桌面 WPF 应用程序中播放 OGG 声音文件?