我想以编程方式找出属性的默认绑定(bind)模式。
例如,如果我根据 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...
}
}
最佳答案
使用DependencyProperty.GetMetadata
在 DependencyObject
上。这将为您提供一个 PropertyMetadata
值,该值通常是 FrameworkPropertyMetadata
的一个实例。如果可能,转换为该类型并检查 BindsTwoWayByDefault
的值.
例如:
var metadata = property.GetMetadata(target) as FrameworkPropertyMetadata;
if (metadata != null)
{
var isTwoWay = metadata.BindsTwoWayByDefault;
}
关于c# - 如何获得依赖属性的默认绑定(bind)模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20504950/