【问题标题】:WPF conditional datagrid groupingWPF 条件数据网格分组
【发布时间】:2021-12-17 10:31:15
【问题描述】:

我有一个根据客户名称进行分组的 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>

【问题讨论】:

    标签: wpf datagrid wpf-controls


    【解决方案1】:

    我不知道如何在 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}">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2014-05-06
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多