是否可以创建BindingBase类型的属性

本文关键字:类型 属性 BindingBase 创建 是否 | 更新日期: 2023-09-27 18:00:12

我有一个用户控件,我在其中添加了BindingBase类型的名为"ImageBinding"的依赖属性,我的问题是如何在Xaml中初始化此属性?例如,如果我有一个名为Value的int类型的依赖属性,在xaml中,我会这样初始化它:

Value="1"

Value={Binding Age}

但是如果我的属性类型是BindingBase呢?

是否可以创建BindingBase类型的属性

我按照AndrewS的建议将ImageBinding更改为CLR属性,并且它有效。

在我的例子中,我正在创建一个AttachedProperty,所以这意味着正常的CLR属性是不可能的。

诀窍是将DependencyProperty类型声明为BindingExpressionBase,而不是BindingBase。

然后,您可以从BindingExpressionBase.ParentBindingBase属性获取BindingBase。

public static class Example
{
    public static BindingExpressionBase GetMyBinding(DependencyObject obj)
    {
        return (BindingExpressionBase)obj.GetValue(MyBindingProperty);
    }
    public static void SetMyBinding(DependencyObject obj, BindingExpressionBase value)
    {
        obj.SetValue(MyBindingProperty, value);
    }
    public static readonly DependencyProperty MyBindingProperty =
        DependencyProperty.RegisterAttached(
            name:               "MyBinding",
            propertyType:       typeof(BindingExpressionBase),
            ownerType:          typeof(Example),
            defaultMetadata:    new FrameworkPropertyMetadata(null));
}
DependencyObject obj = ...;
BindingBase bb = Example.GetMyBinding(obj)?.ParentBindingBase;