2010-08-08 11 views
11

Yine de Silverlight 4'teki bir DataGridTemplateColumn öğesinin görünürlük özelliğini sabitlemek mümkün değil gibi görünüyor. Bazı Googling yaptım ve orada with the fact that it was not a DependencyObject ve this would change in SL4 yapmak olduğunu gösteren bir kaç mesaj var gibi görünüyor, ama durum böyle görünmüyor.Neden Silverlight 4'te bir DataGridTemplateColumn Visiblity'yi bağlayamıyorum?

Etrafında çalışmak için bunu datagrid yüklü olayın arkasındaki kodda yapıyorum, ancak bunun neden böyle olduğunu merak ediyorum. onun Görünürlük özelliği için bir DependencyProperty tanımlamaz DependencyObject türetmek etmez DataGridTemplateColumn iken

{System.ArgumentException: Object of type 'System.Windows.Data.Binding' cannot be converted to type 'System.Windows.Visibility'. 
    at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) 
    at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) 
    at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture) 
    at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) 
    at MS.Internal.XamlMemberInfo.SetValue(Object target, Object value) 
    at MS.Internal.XamlManagedRuntimeRPInvokes.SetValue(XamlTypeToken inType, XamlQualifiedObject& inObj, XamlPropertyToken inProperty, XamlQualifiedObject& inValue)} 

cevap

12

: Burada

hatası (bir rehberine değerini veren bir dönüştürücü ile) Elde mesajdır. Aslında, herhangi bir bağımlılık özelliği tanımlamaz, dolayısıyla ona bağlanacak hiçbir şey alamazsınız. Veri Kılavuzu Şablon Sütun üzerinde size bağlamak istediğiniz özellikleri için

+0

teşekkürler. – Rodney

+0

Öylesine sinir bozucu. –

+0

Anlaşmalı. Hopefull MS gelecekte bu bağımlılık özelliklerini yapar. –

7

bunu kullanın: her zaman olduğu gibi Yardımlarınız Anthony için

public class CustomDataGridTemplateColumn : DataGridTemplateColumn 
{ 
    public static readonly DependencyProperty VisibilityBindingProperty = DependencyProperty.Register(
     "VisibilityBinding", typeof(Visibility), typeof(CustomDataGridTemplateColumn), new PropertyMetadata(Visibility.Collapsed, new PropertyChangedCallback(OnVisibilityChanged))); 

    public Visibility VisibilityBinding 
    { 
     get { return (Visibility)this.GetValue(VisibilityBindingProperty); } 
     set { this.SetValue(VisibilityBindingProperty, value); } 
    } 

    private static void OnVisibilityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     ((CustomDataGridTemplateColumn)d).Visibility = (Visibility)e.NewValue; 
    } 
} 
+0

Gerçekten iyi bir çözüm için teşekkür ederiz. :) –

+1

Hey @JohnySkovdal ve StuartBale: Bu harika görünüyor, ama (başarısız bir şekilde) bunu kullanmaya çalışıyorum ve örneğin eksik bir şey olup olmadığını merak ediyordum. XAML'de tanımlanan Bağlamada özel bir şey var mı? ViewModel veya row/ItemsSource DataContext için bağlayıcı mı? –

+0

@JoeL. Aslında başka bir rotaya da gittim, çünkü çok fazla sorunla karşılaştım, ama bu çözümle ilgili olduklarından% 100 emin değilim, bu yüzden size gerçekten yardımcı olamam. Sorunum biraz daha karmaşıktı, bu yüzden kodun arkasındaki şablonları oluşturmayı bitirdim ve gösterilmemesi gerekiyorsa sütunu eklemem. –

İlgili konular