Comment lier DataGridColumn.La visibilité?

J'ai un problème similaire au message suivant:

Silverlight DataGridTextColumn De Liaison De La Visibilité

J'ai besoin d'avoir une Colonne dans une Silverlight DataGrid être visible/effondré basée sur une valeur à l'intérieur d'un ViewModel. Pour accomplir cela, je tente de Lier la propriété de Visibilité à un ViewModel. Cependant j'ai vite découvert que la Visibilité de la propriété n'est pas une DependencyProperty, par conséquent, il ne peut pas être lié.

Pour résoudre ce problème, j'ai tenté de la sous-classe de ma propre DataGridTextColumn. Avec cette nouvelle classe, j'ai créé une DependencyProperty, qui finalement pousse les modifications apportées à la DataGridTextColumn.La visibilité de la propriété. Cela fonctionne bien, si je n'ai pas databind. Le moment où j'ai databind de ma nouvelle propriété, il ne parvient pas, avec un AG_E_PARSER_BAD_PROPERTY_VALUE exception.

public class MyDataGridTextColumn : DataGridTextColumn
{
    #region public Visibility MyVisibility

    public static readonly DependencyProperty MyVisibilityProperty =
        DependencyProperty.Register("MyVisibility", typeof(Visibility), typeof(MyDataGridTextColumn), new PropertyMetadata(Visibility.Visible, OnMyVisibilityPropertyChanged));

    private static void OnMyVisibilityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var @this = d as MyDataGridTextColumn;

        if (@this != null)
        {
            @this.OnMyVisibilityChanged((Visibility)e.OldValue, (Visibility)e.NewValue);
        }
    }

    private void OnMyVisibilityChanged(Visibility oldValue, Visibility newValue)
    {
        Visibility = newValue;
    }

    public Visibility MyVisibility
    {
        get { return (Visibility)GetValue(MyVisibilityProperty); }
        set { SetValue(MyVisibilityProperty, value); }
    }

    #endregion public Visibility MyVisibility
}

Voici un petit extrait de la XAML.

<DataGrid ....>
    <DataGrid.Columns>
        <MyDataGridTextColumn Header="User Name"
                              Foreground="#FFFFFFFF"
                              Binding="{Binding User.UserName}"
                              MinWidth="150"
                              CanUserSort="True"
                              CanUserResize="False"
                              CanUserReorder="True"
                              MyVisibility="{Binding Converter={StaticResource BoolToVisibilityConverter}, Path=ShouldShowUser}"/>
        <DataGridTextColumn .../>
    </DataGrid.Columns>
</DataGrid>

Quelques faits importants.

  • Le Convertisseur est en effet défini ci-dessus dans les ressources locales.
  • Le Convertisseur est correct, il est utilisé à plusieurs autres endroits dans la solution.
  • Si je remplace l' {Binding} syntaxe de la MyVisibility propriété avec "Effondré" la Colonne n'est en fait disparaître.
  • Si je crée un nouveau DependencyProperty (c'est à dire la chaîne Toto), et se lier à elle, je reçois la AG_E_PARSER_BAD_PROPERTY_VALUE exception.

Quelqu'un a une idée pourquoi cela ne fonctionne pas?

Toute résolution à ce sujet? Je ne suis pas sûr de ce qu'il se passe (le dp a l'air bien pour moi...), mais si vous ne pouvez pas ajouter une nouvelle chaîne DependencyProperty et se lier à elle, qui semble comme il a obtenu d'être le problème.

OriginalL'auteur Chris Mancini | 2009-06-25