Установите два ObservableCollection равными, не теряя WPF-Binding - PullRequest
0 голосов
/ 18 марта 2011

У меня есть ObservableCollection MediaFile

MediaControlClass.GetInstanze().MediaLibrary

У меня много привязок WPF этой ObservableCollection.В некоторых случаях мне нужно пополнить эту коллекцию формой XML-файла.В XML-файле находятся 20 000 медиа-файлов.Я попробовал два способа.

Первый способ:

serializer = new XmlSerializer(typeof(System.Collections.ObjectModel.ObservableCollection<MediaFile>));
                    XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
                    xmlReaderSettings.CheckCharacters = false;

                    using (XmlReader reader = XmlReader.Create(Environment.CurrentDirectory + "\\Notes.xml", xmlReaderSettings))
                    {
                        o = serializer.Deserialize(reader);
                        MediaControlClass.GetInstanze().MediaLibrary.Clear();

                        foreach (var i in (System.Collections.ObjectModel.ObservableCollection<MediaFile>)o)
                            MediaControlClass.GetInstanze().MediaLibrary.Add(i);

                    }

Я добавил каждый MediaFile в MediaControlClass.GetInstanze (). MediaLibrary, который действительно замедлялся.

Второй способ:

serializer = new XmlSerializer(typeof(System.Collections.ObjectModel.ObservableCollection<MediaFile>));
                XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
                xmlReaderSettings.CheckCharacters = false;

                using (XmlReader reader = XmlReader.Create(Environment.CurrentDirectory + "\\Notes.xml", xmlReaderSettings))
                {
                    o = serializer.Deserialize(reader);
                    MediaControlClass.GetInstanze().MediaLibrary = (System.Collections.ObjectModel.ObservableCollection<MediaFile>)o;

                }

Это быстро, но мне нужно повторно связать много элементов управления WPF.

Есть ли способ сделать это быстро и без повторного связывания?

Ответы [ 2 ]

0 голосов
/ 18 марта 2011

Я согласен с Дейном.Если вы вызываете событие OnPropertyChanged в установщике MediaLibrary, вам не нужно перемещать никакую привязку.

0 голосов
/ 18 марта 2011

Это просто дикая догадка, но вызовет ли справка по уведомлению об изменении свойства вручную во втором случае?

Что касается первого метода, возможно, он медленный, потому что вы выполняете типизацию внутри foreach а это бросает на каждую петлю?

...