powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
3 сообщений из 3, страница 1 из 1
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
    #39067840
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Помогите, пожалуйста, разобраться. Есть DataGrid, с ним через биндинг связана ObservableCollection. По столбцам DataGrid можно выполнять сортировку. Когда пользователь сортирует список элементов по некоторому столбцу DataGrid, так же сортируются элементы ObservableCollection. N-му элементу DataGrid соответствует n-ый элемент ObservableCollection. Все хорошо.

Если DataGrid отсортирован по некоторому столбцу и пользователь добавляет новый элемент, в коде выполняется ObservableCollection.add(newElemen). В ObservableCollection новый элемент добавляется в конец и получает последний индекс. В DataGrid элемент добавляет по сортировке, может добавиться куда-нибудь в середину и получает совсем другой индекс. И если в ObservableCollection я получу индекс нового элемента для установки SelectedIndex в DataGrid, то получится полное несоответствие. Как при наличии сортировки в DataGrid и добавлении нового элемента (через добавления в ObservableCollection) добиться полного соответствия индексов, полного соответствия порядка в DataGrid и ObservableCollection?
...
Рейтинг: 0 / 0
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
    #39067906
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg5555Добрый день!

Помогите, пожалуйста, разобраться. Есть DataGrid, с ним через биндинг связана ObservableCollection. По столбцам DataGrid можно выполнять сортировку. Когда пользователь сортирует список элементов по некоторому столбцу DataGrid, так же сортируются элементы ObservableCollection. N-му элементу DataGrid соответствует n-ый элемент ObservableCollection. Все хорошо.

Если DataGrid отсортирован по некоторому столбцу и пользователь добавляет новый элемент, в коде выполняется ObservableCollection.add(newElemen). В ObservableCollection новый элемент добавляется в конец и получает последний индекс. В DataGrid элемент добавляет по сортировке, может добавиться куда-нибудь в середину и получает совсем другой индекс. И если в ObservableCollection я получу индекс нового элемента для установки SelectedIndex в DataGrid, то получится полное несоответствие. Как при наличии сортировки в DataGrid и добавлении нового элемента (через добавления в ObservableCollection) добиться полного соответствия индексов, полного соответствия порядка в DataGrid и ObservableCollection?
всё довольно просто, DataGrid в реальности использует ObservableCollection не напрямую, если быть точнее, он её вообще практически не использует (не считая момента, когда устанавливается свойство ItemsSource.
Затем ObservableCollection оборачивается классом ListCollectionView (который наследует ICollectionView).
Если DataGrid.ItemsSource присвоено не ICollectionView, то это представление списка извлекается с помощью метода
CollectionViewSource.GetDefaultView(), это же самое представление можно получить с помощью этого же класса (для твоей ObservableCollection) и уже в ICollectionView ты сможешь получить то представление, что отображено на экране, узнать какой объект является newItemPlaceholder'ом и так далее.
...
Рейтинг: 0 / 0
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
    #39067924
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Oleg5555, сегодня, 12:49 [18232763]
>... добиться полного соответствия индексов, полного соответствия порядка в DataGrid и ObservableCollection?

Если правильно понял вопрос (ObservableCollection отображается в DataGrid и Вы работаете со строкой DataGrid, то например:

//-- Обработка нажатия кнопки сохранения изменений записи в базу данных
//----------------------------------------------------------------------
private async void btc_Сохранить_Click(object sender, RoutedEventArgs e) {
. . .
if (dgv_Звания.SelectedIndex == -1) return; //-- Нет выбора
//-- Получим индекс элемента коллекции
xrow = (row_Звание)dgv_Звания.SelectedItem;
iRow = oc_Звания.IndexOf(xrow);
. . .

где:
dgv_Звания - DataGrid,
oc_Звания - ObservableCollection,
row_Звание row - текущая выбранная строка,
int iRow - номер строки в ObservableCollection.

С уважением,
Владимир
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]