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

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

Если DataGrid отсортирован по некоторому столбцу и пользователь добавляет новый элемент, в коде выполняется ObservableCollection.add(newElemen). В ObservableCollection новый элемент добавляется в конец и получает последний индекс. В DataGrid элемент добавляет по сортировке, может добавиться куда-нибудь в середину и получает совсем другой индекс. И если в ObservableCollection я получу индекс нового элемента для установки SelectedIndex в DataGrid, то получится полное несоответствие. Как при наличии сортировки в DataGrid и добавлении нового элемента (через добавления в ObservableCollection) добиться полного соответствия индексов, полного соответствия порядка в DataGrid и ObservableCollection?
...
Рейтинг: 0 / 0
04.10.2015, 17:54
    #39067906
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
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
04.10.2015, 18:46
    #39067924
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
>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
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Согласование индексов (порядка) элементов в DataGrid и ObservableCollection / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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