2013-12-10 8 views
6

プロパティの既定のバインディングモードをプログラムで調べる必要があります。依存関係プロパティのデフォルトバインディングモードを取得するにはどうすればよいですか?

例えば、私が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... 
    } 
} 

答えて

4

使用DependencyProperty.GetMetadataDependencyObjectに。これにより、通常FrameworkPropertyMetadataのインスタンスになるPropertyMetadataの値が与えられます。可能であれば、そのタイプにキャストし、BindsTwoWayByDefaultの値を確認してください。例えば

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

私はこの答えでDependencyPropertyには、デフォルトでBindingMode.OneTime' 'に設定する方法がないことを推測していますか?それはTwoWayかどうかですか? – michael

+0

@michael:フレームワーク固有のプロパティの場合は、yesです。 'OneTime'と' OneWayToSource' AFAIKは、プレーンな.NETプロパティを持つデータバインディングをよりよくサポートするためにのみ存在します。 – Jon

関連する問題