如何获得依赖项属性的默认绑定模式?

时间:2013-12-10 20:51:40

标签: c# wpf data-binding dependency-properties binding-mode

我想以编程方式找出属性的默认绑定模式。

例如,如果我针对TextBox.TextProperty对其进行检查,则应为BindingMode.TwoWay,但如果为ItemsControl.ItemsSourceProperty,则应为BindingMode.OneWay

我实现了一个自定义的MarkupExtension,到目前为止我的代码中已经有了这么多:

public override object ProvideValue(IServiceProvider provider)
{
    var service = provider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;

    if (service != null)
    {
        var target = service.TargetObject as DependencyObject;
        var property = service.TargetProperty as DependencyProperty;

        // Not sure what to do with the target and propery here...
    }
}

1 个答案:

答案 0 :(得分:4)

DependencyObject上使用DependencyProperty.GetMetadata。这将为您提供PropertyMetadata值,该值通常是FrameworkPropertyMetadata的实例。如果可能,请转换为该类型并检查BindsTwoWayByDefault的值。

例如:

var metadata = property.GetMetadata(target) as FrameworkPropertyMetadata;
if (metadata != null)
{
    var isTwoWay = metadata.BindsTwoWayByDefault;
}