如何在特定条件下对数据网格中的数据进行分组

本文关键字:数据 网格 数据网 条件下 | 更新日期: 2023-09-27 17:57:08

如果他InProgress,我如何进入GridViewState创建组,并且所有其他选项都没有任何组?

public class RecordVm: VmBase
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public State State { get; set; }
        public bool IsCompeleted { get; set; }
    }
    public enum State
    {
        Empty, Opened, InProgress, Completed
    }
     public class MainVm : VmBase
    {
        public ObservableCollection<RecordVm> RecordVms { get; } = new ObservableCollection<RecordVm>();
        public ListCollectionView ListCollection {get;}
        public MainVm()
        {
            ListCollection = new ListCollectionView(RecordVms);
            ListCollection.GroupDescriptions?.Add(new PropertyGroupDescription("State"));
        }
    }

目前,我已经为状态的每个变体创建了一个组,但这样的选项不适合我。

<DataGrid ItemsSource="{Binding ListCollection}"
      Style="{StaticResource AzureDataGrid}"
      RowStyle="{DynamicResource DataGridRowStyleStateGreen}">
<DataGrid.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Path=Name}" />
                </StackPanel>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
        <GroupStyle.ContainerStyle>
            <Style TargetType="{x:Type GroupItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GroupItem}">
                            <Expander>
                                <Expander.Header>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding Path=Name}" />
                                        <TextBlock Margin="5,0,0,0" Text="{Binding Path=ItemCount}"/>
                                        <TextBlock Text=" Items"/>
                                    </StackPanel>
                                </Expander.Header>
                                <ItemsPresenter />
                            </Expander>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>
</DataGrid.GroupStyle>
enter code here

如何在特定条件下对数据网格中的数据进行分组

如果我理解正确,这可能会按照您想要的方式分组:Xaml保持不变!

public class RecordVm 
        {
            public int Id { get; set; }
            public string Description { get; set; }
            public State State {
                get { return this._state; }
                set { this._state = value;
                    if (value == State.InProgress)
                        this.InProgress = true;return;
                    this.InProgress = false; }
            }
            private State _state;
            public bool IsCompeleted { get; set; }
            public bool InProgress { get; private set; }

        }

转炉

public class DisplayConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                if (value == null) return "";
                if ((bool) value) return "In Progress";
                return "Finished";
            }
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

用法

ListCollection.GroupDescriptions?.Add(new PropertyGroupDescription("InProgress", new DisplayConverter()));

请查看这是否解决了您的问题:

ListCollection = new ListCollectionView(RecordVms);
ListCollection.GroupDescriptions?.Add(new PropertyGroupDescription("State"));
ListCollection.Refresh();
CollectionViewGroup group = (CollectionViewGroup) ListCollection.Groups[0];
ListCollectionView viewOfGroup1 = new ListCollectionView(group.Items);            
viewOfGroup1.Filter = ((i) => { return ((RecordVm)i).State == State.InProgress; });
viewOfGroup1.Refresh();