Порядок сортировки управляется с помощью GroupByComparer класса FieldSettings, и это может быть достигнуто путем создания пользовательского IComparer для поля, сгруппированных. Обратите внимание, что группировка на самом деле тоже сортировка, поэтому я собираюсь предположить, что вы все еще хотите, чтобы сортировка по умолчанию происходила, когда столбец сначала сгруппирован.
В следующем примере группа по записям может быть отсортирована по одному сводному результату при нажатии. Это было достигнуто с помощью настраиваемого IComparer для групп, сортирует значение тега, если он установлен, и если не установлен возвращается к значению группы по записи:
public class SummarySortComparer : IComparer
{
public int Compare(object x, object y)
{
GroupByRecord xRecord = x as GroupByRecord;
GroupByRecord yRecord = y as GroupByRecord;
IComparable xValue = xRecord.Value as IComparable;
object yValue = yRecord.Value;
if (xRecord.Tag != null)
{
xValue = xRecord.Tag as IComparable;
yValue = yRecord.Tag;
}
return xValue.CompareTo(yValue);
}
}
Это устанавливается на сетки, используя следующие:
this.XamDataGrid1.FieldSettings.GroupByComparer = new SummarySortComparer();
Используйте PreviewMouseLeftButtonDown сетки, чтобы получить сводку, которая была нажата, если есть был один и установить тег группы по записи, чтобы быть значение этого краткого и обновить вид от сетки:
void XamDataGrid1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
SummaryResultPresenter summaryResultPresenter =
Utilities.GetAncestorFromType(e.OriginalSource as DependencyObject, typeof (SummaryResultPresenter), false) as
SummaryResultPresenter;
if (summaryResultPresenter != null)
{
GroupBySummariesPresenter groupBySummariesPresenter =
Utilities.GetAncestorFromType(summaryResultPresenter,
typeof(GroupBySummariesPresenter), false) as GroupBySummariesPresenter;
if (groupBySummariesPresenter != null)
{
SummaryResult summaryResult = summaryResultPresenter.SummaryResult;
int summaryResultIndex = summaryResult.ParentCollection.IndexOf(summaryResult);
foreach (GroupByRecord groupRecord in groupBySummariesPresenter.GroupByRecord.ParentCollection)
{
groupRecord.Tag = groupRecord.ChildRecords.SummaryResults[summaryResultIndex].Value;
}
this.XamDataGrid1.Records.RefreshSort();
}
}
}
Обратите внимание, что в этом примере есть несколько ограничений, в которых я не реализовал какой-либо способ очистить то, что было отсортировано, так что это то, что при желании все равно должно быть реализовано вами. Я также не включал логику для изменения направления сортировки и использовал направление, в котором в настоящее время сортируется поле, поэтому, если вы также хотите обновить направление, это также нужно будет добавить.
Спасибо за ваш ответ, но это сортировка только на одном пути. Мне нужен оба способа. Asc/Desc.Пожалуйста, совет, как получить функциональность. –
Чтобы реализовать возможность изменения сортировки при последующих кликах, вам нужно будет добавить отслеживание, чтобы вы знали, была ли сортировка уже выполнена, и вам нужно будет установить направление сортировки соответствующим образом. Поле «Сортировка и группировка». В разделе «Тематический раздел» подробно описывается, как это сделать: http://help.infragistics.com/doc/WPF/Current/CLR4.0/?page=xamDataGrid_Sorting_And_Grouping_Fields_Programmatically.html Обратите внимание, что реализация, предоставлено только показывает, как повторно использовать вид сетки и знать, что сортировать, вы можете расширить это, чтобы удовлетворить ваши потребности. – alhalama
Привет, alhalama, ваш ответ такой же, как и мой другой поток, который я спросил об Infragistics fourm 'https: // www.infragistics.com/my-account/support-case/CAS-128937-R2K0X6'. –