Сортировать строки DataGrid после удаления группировки через XAML - PullRequest
0 голосов
/ 10 января 2019

РЕЗЮМЕ: После удаления группировки есть элементы в сортировке сетки данных.

Итак, в настоящее время у меня есть проект с пользовательским элементом управления, который отображает один из двух элементов управления в зависимости от типа данных. Теперь, когда этим элементом управления является 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 или не имело бы только заголовки столбцов кликов пользователей.

1 Ответ

0 голосов
/ 10 января 2019

Вы можете отсортировать 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));
}

Если не добавлено SortDescriptions, порядок сортировки фактически не определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...