摘要:删除分组后,数据网格中的项目会排序。
因此,我目前有一个带有用户控件的项目,该控件根据数据类型显示两个控件之一。现在,当该控件是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这样的不错的解决方案,或者没有让用户单击列标题。
答案 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));
}
,则排序顺序实际上是不确定的。