Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得依赖项属性的默认绑定模式?_C#_Wpf_Data Binding_Dependency Properties_Binding Mode - Fatal编程技术网

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属性的数据绑定。