我想以编程方式找出属性的默认绑定模式。
例如,如果我针对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...
}
}
答案 0 :(得分:4)
在DependencyObject
上使用DependencyProperty.GetMetadata
。这将为您提供PropertyMetadata
值,该值通常是FrameworkPropertyMetadata
的实例。如果可能,请转换为该类型并检查BindsTwoWayByDefault
的值。
例如:
var metadata = property.GetMetadata(target) as FrameworkPropertyMetadata;
if (metadata != null)
{
var isTwoWay = metadata.BindsTwoWayByDefault;
}