Почему я не могу связать Visiblity DataGridTemplateColumn в Silverlight 4? - PullRequest
11 голосов
/ 08 августа 2010

Кажется, что по-прежнему невозможно связать свойство видимости DataGridTemplateColumn в Silverlight 4.Я немного прогуглил, и, кажется, есть несколько постов, предполагающих, что это было связано с с тем фактом, что это не DependencyObject и как это изменится в SL4 , но это не похожена всякий случай.

Чтобы обойти это, я делаю это в коде события загрузки данных, но мне интересно, почему это так?

ВотЯ получаю сообщение об ошибке (с преобразователем, который возвращает значение видимости):

{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)}

Ответы [ 2 ]

12 голосов
/ 08 августа 2010

Хотя DataGridTemplateColumn происходит от DependencyObject, оно не определяет DependencyProperty для своего свойства Visibility.На самом деле он не определяет никаких свойств зависимостей, поэтому вы все равно не можете получить что-либо для него.

7 голосов
/ 17 июля 2012

Используйте это для любых свойств, с которыми вы хотите связать, в столбце Шаблон таблицы данных:

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