wpf - WPF 条件数据网格分组
问题描述
我有一个基于客户名称分组的 DataGrid,它可以工作。
<GroupBox Header="{Binding ElementName=MainWindow, Path=ocS3FileListCount}" ContentStringFormat="" Name="grpRemote" Margin="5,0,0,0" Grid.Column="1" Grid.Row="2">
<GroupBox.Resources>
<CollectionViewSource x:Key="S3List" Source="{Binding ElementName=MainWindow, Path=ocS3FileList}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="CustomerName"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</GroupBox.Resources>
<DataGrid x:Name="dgS3List" Margin="0,0,0,0" ItemsSource="{Binding Source={StaticResource S3List}}" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="File Name" Width="*" Binding="{Binding Path=FileName}" IsReadOnly="True" />
<DataGridTextColumn Header="Received" Width="100" Binding="{Binding Path=JobReceived,StringFormat=d}" IsReadOnly="True" Stylus.IsPressAndHoldEnabled="True" />
<DataGridTextColumn Header="Date" Width="100" Binding="{Binding Path=JobDate,StringFormat=d}" IsReadOnly="True" Stylus.IsPressAndHoldEnabled="True" />
</DataGrid.Columns>
</DataGrid>
</GroupBox>
我确实有一些用户希望选择为不同用途打开和关闭分组。我之前根据不同控件的状态使用过条件样式,但是是否可以有条件 GroupStyle?
基于工具栏复选框启用它似乎是一个很好的解决方案:
<CheckBox x:Name="chkGroupSwitch" IsChecked="True">Enable Grouping</CheckBox>
解决方案
我不知道在 XAML 中使您的 GroupStyle 样式有条件的方法,但由于 GroupStyle 仅在您的 ViewSource 中有 GroupDescription 时适用,所以我将使用不同的方法:
C# 中的解决方案很简单。您所要做的就是在复选框的状态发生变化时添加/删除 ViewSource 的 PropertyGroupDescription。
例如。
private void ToggleGroupingEnabled(bool mode)
{
CollectionViewSource viewSource = grpRemote.Resources["MyViewSourceName"] as CollectionViewSource;
viewSource.GroupDescriptions.Clear();
if (mode)
{
var groupDesc = new PropertyGroupDescription("CustomerName");
viewSource.GroupDescriptions.Add(groupDesc);
}
}
假设您的 ViewSource 有一个名称:
<CollectionViewSource x:Key="S3List" x:Name="MyViewSourceName" Source="{Binding ElementName=MainWindow, Path=ocS3FileList}">
推荐阅读
- r - Removing column/s from multiple data-frames
- javascript - 从 url 加载视频时出现奇怪的 Firefox 警告
- amazon-web-services - 使用 AWS Lambda Webhook 的 Dialogflow
- sql - SQL查询每个ID的最新日期/时间戳记录
- google-cloud-datastore - Google Cloud Datastore - 按种类查询和按 GQL 查询的不同结果
- ruby - 将 current_user id 分配给导入的学生列表
- openshift - 完成后自动删除 Openshift 上的 pod
- intellij-idea - 在 IntelliJ 中运行 JUnit 测试时如何防止想法测试输出文件?
- python - 下载 spacy 模型并获取 AttributeError 'NoneType' 对象没有属性 'ndarray'
- javascript - 在 xtype tagfield 中,发送到服务器的值显示为单个组合行。extjs