2013-12-10 27 views
6

Bir özelliğin varsayılan ciltleme modunun ne olacağını program aracılığıyla öğrenmek istiyorum. Ben TextBox.TextProperty karşılaştırılmak eğerBir bağımlılık özelliğinin varsayılan ciltleme modunu nasıl edinirsiniz?

Örneğin, BindingMode.TwoWay olmalı ancak sorun olduğu takdirde ItemsControl.ItemsSourceProperty o BindingMode.OneWay olmalıdır.

Özel bir MarkupExtension uygulanan ve şimdiye kadar benim kodunda kadar bu aldık:

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... 
    } 
} 

cevap

4

kullanın DependencyProperty.GetMetadataDependencyObject üzerinde. Bu, genellikle FrameworkPropertyMetadata'un bir örneği olacak olan PropertyMetadata değerini verecektir. Mümkünse bu türe yayın yapın ve BindsTwoWayByDefault değerini kontrol edin. Örneğin

:

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

Bu cevap tarafından DependencyProperty varsayılan olarak BindingMode.OneTime' 'ayarlanmalıdır için hiçbir yol olduğunu tahmin ediyorum? Ya iki ya da değil mi? – michael

+0

@michael: Çerçeveye özgü özellikler için, evet. 'OneTime' ve' OneWayToSource' AFAIK, yalnızca .NET'in basit özellikleriyle veri bağlamayı daha iyi desteklemek için var. – Jon

İlgili konular