C# 如何获得依赖项属性的默认绑定模式?
我想通过编程找出属性的默认绑定模式 例如,如果我根据C# 如何获得依赖项属性的默认绑定模式?,c#,wpf,data-binding,dependency-properties,binding-mode,C#,Wpf,Data Binding,Dependency Properties,Binding Mode,我想通过编程找出属性的默认绑定模式 例如,如果我根据TextBox.TextProperty检查它,它应该是BindingMode.TwoWay,但是如果它是ItemsControl.ItemsSourceProperty它应该是BindingMode.one-way 我实现了一个定制的MarkupExtension,到目前为止,我在代码中已经做到了这一点: public override object ProvideValue(IServiceProvider provider) {
TextBox.TextProperty
检查它,它应该是BindingMode.TwoWay
,但是如果它是ItemsControl.ItemsSourceProperty
它应该是BindingMode.one-way
我实现了一个定制的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...
}
}
在DependencyObject
上使用。这将为您提供一个PropertyMetadata
值,该值通常是FrameworkPropertyMetadata
的实例。如果可能,转换为该类型,并检查的值
例如:
var metadata = property.GetMetadata(target) as FrameworkPropertyMetadata;
if (metadata != null)
{
var isTwoWay = metadata.BindsTwoWayByDefault;
}
我猜根据这个答案,DependencyProperty无法设置为
BindingMode。默认情况下一次性?要么是双向的,要么不是双向的?@michael:对于特定于框架的属性,是的OneTime
和OneWayToSource
AFAIK的存在只是为了更好地支持与普通.NET属性的数据绑定。