Здесь у меня есть представление, определенное в XAML следующим образом: первый DataGrid отображает список строк. Когда пользователь выбирает строку, ContentControl отображает информацию об этом выбранном элементе, включая список подэлементов. Эти подэлементы отображаются в другом DataGrid. Каждый подэлемент имеет свойство Index, используемое для определения порядка сортировки подэлементов с помощью CollectionViewSource в ресурсах ContentControl. Подэлементы DataGrid имеют свойство ItemsSource, привязанное к CollectionViewSource.
....
А вот как MyUserControl определяется в XAML:
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
....
Свойство Index не используется в столбце DataGrid. Он используется, чтобы предоставить пользователям возможность размещать подэлементы в том порядке, в котором они хотят, нажимая кнопки (Вверх и Вниз). Сортировка работает нормально, когда выбран первый элемент. Однако как только пользователь выбирает другой элемент, SubItemsDataGrid не отображает подэлементы в отсортированном порядке. Даже при повторном выборе первого элемента сортировка больше не работает.
Я попробовал использовать ItemsContol вместо DataGrid, чтобы быть уверенным, что CollectionViewSource обеспечивает правильный упорядоченный список. Это работает.
Затем я попытался перехватить событие DdataContextChanged DataGrid, в котором я написал код для замены itemsSource:
private void SubItemsDataGrid_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
DataGrid dg = sender as DataGrid;
dg.ItemsSource = null;
ICollectionView view = CollectionViewSource.GetDefaultView(((IEnumerable)dg.DataContext).SubItems);
view.SortDescriptions.Add(new SortDescription("Index", ListSortingOrder.Ascending));
view.Refresh();
dg.ItemsSource = view;
}
Я пробовал много других вариантов назначения ItemsSource DataGrid, но все они потерпели неудачу. Похоже, что DataGrid управляет сортировкой скрытым способом.
Я также пытался определить DataGrid в его собственном DataTemplate и раздувать его каждый раз, когда DataContextChanged< Для элемента MyUserControl было запущено событие /code>.
Вопрос: знаете ли вы, как заставить DataGrid принимать входящий отсортированный список? Или вы знаете другой способ сделать все это, зная, что я выбрал DataGrid, потому что он имеет встроенные функции создания и удаления новых элементов?
< strong>EDIT Я также пытался определить скрытый столбец в DataGrid, привязанный к свойству Index, и настроить DataGrid для сортировки из этого скрытого столбца, но это не работает :
Подробнее здесь: https://stackoverflow.com/questions/791 ... rting-does
WPF DataGrid, определенный в DataTemplate с использованием CollectionViewSource для сортировки, не сортируется при перер ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как установить DataTemplate для WPF TreeView для отображения всех элементов списка?
Anonymous » » в форуме C# - 0 Ответы
- 37 Просмотры
-
Последнее сообщение Anonymous
-