【发布时间】:2015-08-17 18:08:55
【问题描述】:
我正在尝试使用允许用户显示/隐藏列的控件构建一个 DataGrid。我的 DataGrid 将有大约 40 列,并不是所有的时间都需要。我已经能够用一个使用 GridView 的 ListView 来做这件事。 代码如下:
<DataGrid Name="MyDataGrid" Grid.Row="2" Grid.Column="0" ItemsSource="{Binding ReportOrderingCustomersForSalesRepCollection}" Style="{DynamicResource styleDataGrid}" HeadersVisibility="All" AutoGenerateColumns="False" RowHeaderWidth="0" RowHeight="25">
<DataGrid.Columns>
<DataGridTextColumn Header="Customer #" Binding="{Binding CustomerNumber}" Width="90" Visibility="{Binding ElementName=Visibility_Txt,Path=Text,Mode=OneWay}"/>
<DataGridTextColumn Header="Customer Name" Binding="{Binding CustomerName}" Width="125" />
<DataGridTemplateColumn Header="Email" CellTemplate="{StaticResource Email}" Width="150" />
</DataGrid.Columns>
</DataGrid>
<!-- text box -->
<TextBox Name="Visiblility_Txt">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=ColumnVisibilityCheck,Path=IsChecked}" Value="False">
<Setter Property="Text" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=ColumnVisibilityCheck,Path=IsChecked}" Value="True">
<Setter Property="Text" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<!-- checkbox -->
<CheckBox Content="Show/Hide Customer Number" Name="ColumnVisibilityCheck" IsChecked="True" />
所以我有一个 DataGrid 设置。第一个 DataGridTextColumn 上的 Visibility 属性设置为与“Visibility_Txt”的文本属性的绑定。该文本框上的文本将设置为 Collapsed 或 Visible,具体取决于 ColumnVisibilityCheck 是否被选中。
就像我说的,这适用于列表视图,为什么这不适用于 DataGrid?
【问题讨论】:
-
ViewModel/代码隐藏?而且您至少有 3 个网格行但没有行定义
-
行从 ItemsSource 填充。我想显示/隐藏各个列。
-
网格行与数据网格行不同:
-
是的,我明白,我问的是如何在 DataGrid 中显示/隐藏列,请阅读帖子。与行无关。
-
如果我们没有实际查看数据网格所需的代码,您希望我们如何帮助您?请提供使示例工作所需的一切。