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

时间:2014-04-25 12:58:18

标签: c# wpf xaml binding dependency-properties

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

Value="1"

Value={Binding Age}

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

2 个答案:

答案 0 :(得分:0)

我将ImageBinding更改为CLS属性,正如AndrewS建议的那样,它可以正常工作。

答案 1 :(得分:0)

就我而言,我正在创建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;