如何绑定到依赖对象的依赖属性?

How to bind to the dependency property of the dependency object?

以下只是问题核心的总结

我定义的 class 有一个依赖 属性 如下。

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 中使用上面的 class。 下面的代码就是一个例子。

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>

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

错误信息是 "It can't found connectable 'TestProperty' property in the 'TestMap' format."

感谢阅读。

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

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