Здесь у меня есть представление, определенное в 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#
Место общения программистов C#
1731742990
Anonymous
Здесь у меня есть представление, определенное в 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 для сортировки из этого скрытого столбца, но это не работает :
Подробнее здесь: [url]https://stackoverflow.com/questions/79192502/wpf-datagrid-defined-in-datatemplate-using-collectionviewsource-for-sorting-does[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия