2011-03-18 30 views
0

我有媒體文件兩個一套的ObservableCollection相等,不失WPF的綁定

的的ObservableCollection

MediaControlClass.GetInstanze().MediaLibrary

我有很多這樣的ObservableCollection的WPF綁定的。 在某些情況下,我必須將這個集合表單重新填充一個XML文件。在XML文件中是20.000 MediaFiles。我嘗試了兩種方法。

第一種方式:

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); 

        } 

我每天媒體文件添加到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控件。

有沒有辦法做到這一點,而無需重新綁定?

回答

0

這只是一個瘋狂的猜測,但會提高手動屬性更改第二種情況下的通知幫助?

至於第一種方法,可能是因爲您在foreach內部進行類型轉換並且它會在每個循環中投射?

+0

如果對象是正在被轉換到的類型,則類型轉換很快。 – 2011-03-18 12:39:25

+0

好的,謝謝馬特:)只是看起來像一個可能的罪魁禍首,因爲它是一個巨大的集合,所以即使相對便宜的東西也可以加起來。 – dain 2011-03-18 12:43:34

+0

是的。我沒有注意到這裏有20,000個文件! – 2011-03-18 17:35:17

0

我同意戴恩。如果您在MediaLibrary setter中引發OnPropertyChanged事件,則不必移動任何綁定。

相關問題