Ger Hayden Ответов: 1

Как создать резервную копию наблюдаемой коллекции, используемой WPF datagrid?


Я хотел бы создать резервную копию наблюдаемой коллекции, используемой WPF datagrid для целей кнопки отката/отмены до момента последней фиксации. У меня есть опция обновления, которая будет считываться из базы данных, но будет включать изменения из других источников.

Что я уже пробовал:

Я попытался скопировать наблюдаемую коллекцию в список, но любые изменения, внесенные в OC, также сохраняются в этом списке. Но помимо одного простого оператора присваивания этот список никаким другим образом не связан с наблюдаемой коллекцией.
Это почти так же, как если бы адрес наблюдаемой коллекции был назначен адресом резервного списка в том виде, как он себя ведет. Как мне преодолеть это?

Garth J Lancaster

Я продолжаю думать о "глубокой копии" / клоне, но я не уверен, что это так просто, как backup = ObservableCollection.Клон()

Ger Hayden

Я буду исследовать эту мысль, она вполне может быть решением.

Gerry Schmitz

Вы должны глубоко клонировать каждый объект от источника до цели, чтобы поддерживать источник в его исходном состоянии. Общего метода "сбора клонов" не существует.

1 Ответов

Рейтинг:
8

RickZeeland

Возможно, вы можете использовать сериализацию, см. Эту статью CodeProject: Реализация глубокого клонирования с помощью сериализации объектов[^]
Поскольку это не статья WPF, вам, вероятно, потребуется изменить код.


Ger Hayden

До сих пор я реализовал как пример в решении Рика, так и глубокий клон из https://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-of-an-object-in-net. Оба они выскакивают при первом запуске оператора потока памяти. Я еще не проверял, почему это произошло.