从WPF中的数据绑定数据网格中排除列

for*_*uce 3 c# data-binding wpf datagrid blend

我有一个源自的ObservableCollection<SolarSystemViewModel>地方.当我绑定到我的数据网格时,暴露和显示在数据网格中.默认情况下,如何在数据网格中隐藏这些列,而不必使用Blend生成XAML,然后手动禁用这些列?SolarSystemViewModelViewModelBaseViewModelBaseIsInDesignModeIsInDesignModeStaticObservableCollection

谢谢.

例: 在此输入图像描述

Tar*_*ara 15

我一直在寻找这个问题的答案.这是一个非常好的解决方案:

像这样绑定DataGrid的属性"OnAutoGeneratingColumn"(注意XAML不是100%完成):

<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" />
Run Code Online (Sandbox Code Playgroud)

在您的CodeBehind中:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    PropertyDescriptor propertyDescriptor = (PropertyDescriptor)e.PropertyDescriptor;
    e.Column.Header = propertyDescriptor.DisplayName;
    if (propertyDescriptor.DisplayName == "IsInDesignMode")
    {
        e.Cancel = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

"e.Cancel = true;" 将阻止生成当前列.这就是您可以轻松地从DataGrid中排除列的方法.


Chi*_*chi 0

请尝试手动定义列......类似的东西。

<dg:DataGrid x:Name="myDataGrid" ItemsSource="{Binding Path = SolarSystemViewModels}" AutoGenerateColumns="False">
  <dg:DataGrid.Columns>
    <dg:DataGridTextColumn Binding="{Binding FactionKills}" Header="Faction Kills" />
    <dg:DataGridTextColumn Binding="{Binding Jumps}" Header="Jumps" />
    <dg:DataGridTextColumn Binding="{Binding PodKills}" Header="Pod Kills" />
    <dg:DataGridTextColumn Binding="{Binding ShipKills}" Header="Ship Kills" />
  </dg:DataGrid.Columns>
</dg:DataGrid>
Run Code Online (Sandbox Code Playgroud)

您不必为此使用 Blend,只需使用 VS XAML 编辑器