通过XAML删除分组后对DataGrid行进行排序

时间:2019-01-10 12:02:52

标签: c# wpf xaml mvvm

摘要:删除分组后,数据网格中的项目会排序。

因此,我目前有一个带有用户控件的项目,该控件根据数据类型显示两个控件之一。现在,当该控件是DataGrid时,我已经在使用分组的模板上设置了样式。

<!--STYLE used to add grouping & expanders to data grid-->
  <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
     <Setter Property="Template">
        <Setter.Value>
           <ControlTemplate TargetType="{x:Type GroupItem}">
              <Expander IsExpanded="False" >
                 <Expander.Header>
                    <TextBlock Text="{Binding Name}" TextDecorations="Underline"/>
                 </Expander.Header>
                 <ItemsPresenter/>
              </Expander>
           </ControlTemplate>
        </Setter.Value>
     </Setter>
  </Style>

它是在这样的模型中设置的,以便在名为“ Group”的属性上进行分组。

Data = new ListCollectionView(rows);
Data.GroupDescriptions.Add(new PropertyGroupDescription("Group"));

现在,用户可以切换按钮以删除标题,因此仅显示值列表。

public bool IsGrouped
{
   get { return isGrouped; }
   set
   {
      isGrouped = value;
      OnPropertyChanged();
      if (ConfigurationModel != null)
      {
         if (IsGrouped == true)
            (ConfigurationModel as ConfigurationKeyPairModel).AddGrouping();
         else
            (ConfigurationModel as ConfigurationKeyPairModel).RemoveGrouping();
      }
   }
}

public void RemoveGrouping()
{
   if(Data.GroupDescriptions.Count > 0)
      Data.GroupDescriptions.RemoveAt(0);
}

public void AddGrouping()
{
   if(Data.GroupDescriptions.Count < 1)
      Data.GroupDescriptions.Add(new PropertyGroupDescription("Group"));
}

删除分组后,该项目将返回到您希望普通数据网格的状态。但是他们仍然处于原先分组的状态。我不想让用户手动单击列标题(无论如何都是隐藏的),我想让这些数据直接进行排序。在过去的一个小时中,我环顾了四周,但是没有找到任何像MVVM这样的不错的解决方案,或者没有让用户单击列标题。

1 个答案:

答案 0 :(得分:1)

您可以通过在属性let e = XCTKVOExpectation(keyPath: "viewControllers", object: myNavigationController) e.handler = { (observedObject, change) in return true } wait(for: [e], timeout: 100) 上添加CollectionView来按属性对SortDescription进行排序:

SortDescriptions

如果未添加public void RemoveGrouping() { if (Data.GroupDescriptions.Count > 0) Data.GroupDescriptions.RemoveAt(0); Data.SortDescriptions.Clear(); Data.SortDescriptions.Add(new SortDescription("PropertyName", ListSortDirection.Ascending)); } ,则排序顺序实际上是不确定的。