Предусловия:
Вы создали свой контрол. В своём контроле создали своё DependencyProperty с объектом коллекции, например ObservableCollection<>:
Listing 1:
public static readonly DependencyProperty ElementPortsProperty = DependencyProperty.Register("CollectedProperty",
typeof(ObservableCollection<>), typeof(MyClass), new FrameworkPropertyMetadata(new ObservableCollection<>());
Проблема:
Возможна следующая ситуация когда вы восстанавливаете такой объект при помощи XamlReader: свойство-коллекция элемента содержит дублированные
элементы.
Пояснение:
Если в контроле есть custom свойство-коллекция, которое заполнено в XAML-файле вашего контрола то в момент дессериализации будет происходить следующее:
Восстановится ваш контрол целиком (с заполненным по-умолчанию свойством-коллекцией), затем в Xaml-файле обнаружится коллекция с объектами и эти объекты добавятся в восстановленный Custom Control.
Как с этим бороться? Два очевидных способа:
1. Не заполнять в Конструкторе коллекцию, а инициализировать её заполнение из .cs-файла когда это нужно.
2. В элементы коллекции добавить уникальный ключ, который позволит проверять наличие этого элемента в коллекции.
Примеры:
Binary of uncorrect working DP
Binary of correct working DP
Sources of correct working DP
четверг, 18 июня 2009 г.
WPF. Создание UserControl со свойством типа коллекция. Некорректная работа XamlReader при восстановлении такого объекта.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий