web-dev-qa-db-fra.com

Comment masquer automatiquement la colonne DataGrid dans WPF à l'aide de MVVM?

En utilisant MVVM (pas de code-behind), je veux masquer mes colonnes DataGrid lors de la sélection, j'ai le code suivant:

<DataGrid ItemsSource="{Binding SSID}" Grid.Row="1"  Margin="10,10,0,0" Height="200" Width="500" Grid.ColumnSpan="2" Name="dg" HorizontalAlignment="Left" AutoGenerateColumns="False">
    <DataGrid.Columns>
      <DataGridTextColumn Header="Network ID" Binding="{Binding _networkID}"></DataGridTextColumn>
      <DataGridTextColumn Header="SSID" Binding="{Binding _ssid}"></DataGridTextColumn>
      <DataGridTextColumn Header="VLAN" Binding="{Binding _vlan}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _authenticationMode}" Binding="{Binding _authenticationMode}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _authentication}" Binding="{Binding _authentication}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _staticWEPKeyType}" Binding="{Binding _staticWEPKeyType}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _staticWEPKeyLength}" Binding="{Binding _staticWEPKeyLength}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _staticWEPKey1}" Binding="{Binding _staticWEPKey1}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _staticWEPKey2}" Binding="{Binding _staticWEPKey2}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _staticWEPKey3}" Binding="{Binding _staticWEPKey3}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _staticWEPKey4}" Binding="{Binding _staticWEPKey4}"></DataGridTextColumn>
      <DataGridTextColumn Visibility="{Binding _wpaPersonalKeyAC}" Binding="{Binding _wpaPersonalKeyAC}"></DataGridTextColumn>
   </DataGrid.Columns>
</DataGrid>

Le code C # est:

var ssid = new SSIDPropertyClass();

ssid._networkID = SSID.Count + 1;
ssid._ssid = EnteredSSIDAC;
ssid._vlan = VlanSSID;

if (ACSelectedSecurityType=="Static WEP")
{
    ssid._authenticationMode = ACSelectedSecurityType;
    ssid._authentication = ACStaticWEPSelectedAuthentication;

    ssid._staticWEPKeyType = ACStaticWEPSelectedKeyType;
    ssid._staticWEPKeyLength = ACStaticWEPSelectedKeyLength;

    ssid._staticWEPKey1 = StaticWEPKey1;
    ssid._staticWEPKey2 = StaticWEPKey2;
    ssid._staticWEPKey3 = StaticWEPKey3;
    ssid._staticWEPKey4 = StaticWEPKey4;

    SSID.Add(ssid);
}
else if(ACSelectedSecurityType=="WPA/WPA2 Personal")
{
    ssid._authenticationMode = ACSelectedSecurityType;
    ssid._wpaPersonalKeyAC = WpaACKey;

    SSID.Add(ssid);
}

Je veux que quand si le bloc est exécuté, il n'ajoute que les colonnes de bloc dans la grille de données et le même cas pour les autres si bloc. En fait, il affiche toujours des colonnes supplémentaires dont je n'ai pas besoin Pour par exemple quand else if est exécuté, je veux afficher uniquement les deux que j'ai ajoutés dans la collection SSID, mais il affiche également les colonnes de bloc. Donc, en résumé, je veux rendre la visibilité des colonnes supplémentaires fausses. Quelqu'un peut-il résoudre mon problème selon mes besoins de le soumettre demain. Toute aide serait-elle grandement appréciable?

18
Sapper

Si vous souhaitez masquer la colonne, vous devez spécifier la propriété Visibility comme ceci,

YourDataGrid.Columns[IndexOftheColumn].Visibility = Visibility.Collapsed;

Si vous souhaitez masquer la première colonne, dites "ID réseau"

dg.Columns[0].Visibility = Visibility.Collapsed;
29
Sajeetharan

Pour ceux qui cherchent à le cacher en XAML

cela ressemblerait à quelque chose comme ceci:

<DataGridTextColumn Visibility="Collapsed" Header="Merchant Reference" Binding="{Binding MerchantReference}"                                    Width="200" />
5

Vous n'avez pas à masquer une colonne, définissez simplement sa propriété MaxWidth à zéro et elle n'apparaîtra pas.

        DataGrid.Columns[IndexOfColumn].MaxWidth = 0;
2
MannyChalwe