Вопрос

Я только начинаю работать с коллекциями (ObservableCollections) и наткнулся на стену, которая, как я предполагал, будет легкой.Я уверен, что это легко, но я просто не нахожу ответа.

У меня есть экран WPF с сеткой данных слева и текстовыми полями справа от экрана.Сетка данных привязана к ObservableCollection (Activities), и я могу щелкнуть вверх и вниз по сетке данных и увидеть, как мои текстовые поля обновляются с правильной информацией.Затем я могу изменить информацию в текстовых полях и сохранить ее обратно в базу данных.Все работает отлично!

Однако, когда дело доходит до добавления записи в коллекцию, я теряюсь в выборе правильного подхода.Я использую метод Добавления, как показано ниже, но как мне перейти к этой вновь созданной записи, чтобы ее можно было отредактировать?Я перепробовал дюжину подходов, но мне еще предстоит найти правильный подход.Текстовые поля просто остаются сфокусированными на последней отредактированной записи.Есть какие-нибудь идеи?

Private Activities As ObservableCollection(Of ActivityRecord)

Private Sub AddMode()
    Dim _ActivityRecord As New ActivityRecord(0, DateTime.Now, Nothing, "", gWorkerID, "")
    Activities.Add(_ActivityRecord)
'Code to move to the newly created record should go here
Это было полезно?

Решение

В WPF каждый элемент управления, производный от ItemsControl (перечислите вашу DataGrid) тайно использует производную от CollectionView для облегчения навигации между записями / элементами - по сути, это класс, который предоставляет Валюта механизм, который помогает другим элементам управления (например, текстовому полю) определять, к какому элементу привязаны данные текущий.

Если вы создаете новый объект и добавляете его в свою ObservableCollection, вы можете использовать один из методов MoveXXX CollectionView для перемещения, чтобы сделать этот элемент текущим.Вы можете (в зависимости от того, какой вид CollectionView вы получаете) также вызвать метод Add в CollectionView , и он автоматически вызовет метод Add в вашей базовой ObservableCollection.

В любом случае, восстановление ссылки на CollectionView является секретом.Вы можете либо использовать статический метод CollectionView (я забыл его название), чтобы получить представление, используемое для вашей DataGrid, либо (и это мой предпочтительный метод) вы можете явно создать ListCollectionView и привязать к нему свою DataGrid вместо ObservableCollection .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top