|
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
|
|||
---|---|---|---|
#18+
Добрый день! Помогите, пожалуйста, разобраться. Есть DataGrid, с ним через биндинг связана ObservableCollection. По столбцам DataGrid можно выполнять сортировку. Когда пользователь сортирует список элементов по некоторому столбцу DataGrid, так же сортируются элементы ObservableCollection. N-му элементу DataGrid соответствует n-ый элемент ObservableCollection. Все хорошо. Если DataGrid отсортирован по некоторому столбцу и пользователь добавляет новый элемент, в коде выполняется ObservableCollection.add(newElemen). В ObservableCollection новый элемент добавляется в конец и получает последний индекс. В DataGrid элемент добавляет по сортировке, может добавиться куда-нибудь в середину и получает совсем другой индекс. И если в ObservableCollection я получу индекс нового элемента для установки SelectedIndex в DataGrid, то получится полное несоответствие. Как при наличии сортировки в DataGrid и добавлении нового элемента (через добавления в ObservableCollection) добиться полного соответствия индексов, полного соответствия порядка в DataGrid и ObservableCollection? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2015, 12:49 |
|
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
|
|||
---|---|---|---|
#18+
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'ом и так далее. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2015, 17:54 |
|
Согласование индексов (порядка) элементов в DataGrid и ObservableCollection
|
|||
---|---|---|---|
#18+
>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. С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2015, 18:46 |
|
|
start [/forum/topic.php?fid=21&msg=39067840&tid=1440793]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
130ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 234ms |
0 / 0 |