РЕЗЮМЕ: После удаления группировки есть элементы в сортировке сетки данных.
Итак, в настоящее время у меня есть проект с пользовательским элементом управления, который отображает один из двух элементов управления в зависимости от типа данных. Теперь, когда этим элементом управления является 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>
И это настроено в модели таким образом, что группировка выполняется по свойству, называемому «Группа».
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 или не имело бы только заголовки столбцов кликов пользователей.