【问题标题】:How to bind to the dependency property of the dependency object?如何绑定到依赖对象的依赖属性?
【发布时间】:2020-08-06 19:31:15
【问题描述】:

以下只是对问题核心的总结。

我定义了具有一个依赖属性的类如下。

public class TestMap : DependencyObject
{
    public bool TestProperty
    {
        get { return (bool)GetValue(TestPropertyProperty); }
        set { SetValue(TestPropertyProperty, value); }
    }

    public static readonly DependencyProperty TestPropertyProperty =
        DependencyProperty.Register("TestProperty", typeof(bool), typeof(TestMap), new PropertyMetadata(false));
}

现在我将在 UserControl 中使用上述类。 以下代码为示例。

public class UserControl1 : Control
{
    public TestMap TestMap { get; set; }
}

我在 MainWindow 中使用了 UserControl1,如下所示。

<Window>
    <Grid>
        <local:UserControl1 />
    </Grid>
</Window>

上面的代码运行良好,但是如果我尝试绑定到 TestMap.TestProperty 我应该怎么做? 我尝试了以下代码,但它不起作用。 (假设 ViewModel 已绑定)

<Window>
    <Grid>
        <local:UserControl1 TestMap.TestProperty="{Binding ViewModelProperty}"/>
    </Grid>
</Window>

上述代码的错误信息如下图。

错误信息是 “它找不到‘TestMap’格式的可连接‘TestProperty’属性。”

感谢阅读。

【问题讨论】:

  • 您不能绑定到像 XAML 中那样的嵌套属性。也许您应该考虑使用attached dependency property
  • 除了不支持语法之外,TestMap 显然是null,所以没有可以设置 Binding 的对象。 TestProperty 不在UserControl1 中的任何原因?

标签: wpf binding dependency-properties


【解决方案1】:

您不能绑定到嵌套属性,即属性 TestMap 返回的对象的属性 TestProperty,就像 XAML 中的这样。不支持。

您应该将TestProperty 移动到UserControl,以编程方式设置它,或者考虑使用可在任何特定类型的对象上设置的attached dependency property

【讨论】:

  • 感谢您的回答。
猜你喜欢
  • 2016-01-22
  • 1970-01-01
  • 2023-03-26
  • 2018-05-21
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多