如何使用MVVM自动隐藏WPF中的DataGrid列?

Sap*_*per 20 c# wpf xaml datagrid mvvm

使用MVVM(没有代码隐藏),我想在选择时隐藏我的DataGrid列,我有以下代码:

<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>
Run Code Online (Sandbox Code Playgroud)

C#代码是:

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);
}
Run Code Online (Sandbox Code Playgroud)

我希望当执行块时,它只添加数据网格中的那些块列,如果是块,则添加其他其他的相同情况.实际上它总是显示我不需要的额外列.例如,当else if执行时我想只显示那个我在SSID集合中添加了两个但是它也显示了阻止列.所以简而言之我想让额外列的可见性为false.任何人都可以解决我的问题因为我需要明天提交它.任何帮助都会很大明显的?

Saj*_*ran 29

如果要隐藏Column,则需要Visibility 像这样指定Property ,

YourDataGrid.Columns[IndexOftheColumn].Visibility = Visibility.Collapsed;
Run Code Online (Sandbox Code Playgroud)

如果要隐藏第一列,请说"网络ID"

dg.Columns[0].Visibility = Visibility.Collapsed;
Run Code Online (Sandbox Code Playgroud)

  • 我没有代码隐藏选项,因为我使用的是MVVM模型我无法直接访问我的dg,如上所述! (5认同)
  • @Sapper你应该在你的问题中明确表示你正在使用MVVM. (2认同)

Mat*_*ius 5

对于那些希望在XAML中隐藏它的人

它看起来像这样:

<DataGridTextColumn Visibility="Collapsed" Header="Merchant Reference" Binding="{Binding MerchantReference}"                                    Width="200" />
Run Code Online (Sandbox Code Playgroud)

  • [WPF中DataGridColumn的绑定可见性](http://stackoverflow.com/a/22074985/1474994) (2认同)
  • 几天来,我一直在与“ DataGridTextColumn”上的可见性作斗争,而这不只是设置可见性那么简单。出于我无法完全理解的原因,但在链接的答案中对此进行了解释,因此绑定值时,该列未“可视地连接到”数据网格。当我在寻找答案时偶然发现这篇文章时,我只是想详细说明一下,因为我无法想到将可见性设置为恒定值的任何理由(尽管它可能会起作用)。 (2认同)