Есть ли коллекция, которая не подписана на INotifyPropertyChanged? - PullRequest
1 голос
/ 31 января 2011

У меня есть класс, который использует INotifyPropertyChanged, и список привязан к сетке. Каждый раз, когда этот объект изменяется, он обновляет значения в сетке. Однако по историческим причинам я хочу добавить этот объект в коллекцию / список и привязать к сетке истории, чтобы показать все изменения. Однако каждый список, который я пробовал, кажется, подписывается на INotifyPropertyChanged, поэтому я всегда получаю одинаковое количество элементов в своей таблице истории.

Есть ли список / коллекция, которая не подписана на INotifyPropertyChanged?

Спасибо

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Если ваш список представляет собой список ссылок на класс, вам потребуется выполнить «глубокое клонирование» всего списка, чтобы сохранить историческую копию. В противном случае копия содержимого списка будет по-прежнему ссылаться на «живые» объекты, которые изменяются. Для этого потребуется код, такой как:

// This requires a way to "Clone" your object...
List<YourClass> listCopy = originalList.Select(item => item.Clone()).ToList();

Если список содержит типы значений (структура), вы можете просто создать новый List<YourType> и скопировать исходные элементы поверх.

// If your type is a value type, you can just copy the list directly...
var listCopy = originalList.ToList();

Также - это не имеет ничего общего с INotifyPropertyChanged. Сами по себе списки ничего не делают с событием PropertyChanged.

0 голосов
/ 31 января 2011

Подумайте об использовании Mode=OneTime в вашей привязке.http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S3

...