2016-09-15 69 views
0

我有一個可觀察集合的性能問題。 (MaAcquisition是可觀察集合) 這是的foreach用綁定的組合框:wpf提高性能綁定巨大的observablecollection

for (double i = 0.1; i <= 5; i += 0.1) 
{ 
    MaAcquisition.Add($"{i:0.0}"); 
    x++; 
} 

有了這個的foreach,每一個循環,我綁定的價值組合框,這是非常緩慢的。

因此,要改善這個我這樣做:

List<String> MaAcquisitionList = new List<String>(); 
for (double i = 0.1; i <= 5; i += 0.1) 
{ 
    MaAcquisitionList.Add($"{i:0.0}"); 
    x++; 
} 
MaAcquisition = MaAcquisitionList; 

它的工作,但這「的foreach」之後我做了綁定選擇「將selectedItem」 =>

SelectedMa = MaAcquisition[x - 1]; 

選定的項目綁定到我的組合框,它不工作(選定的項目是空白的)。

<ComboBox ItemsSource="{Binding MaAcquisition, Mode=TwoWay}" SelectedItem="{Binding SelectedMa, Mode=TwoWay}" IsEnabled="{Binding PreheatingDisable}"/> 

最後,有一個 「SelectedMa」 代碼:

public string SelectedMa 
     { 
      get { return _selectedMa; } 
      set 
      { 
       _selectedMa= value; 
       OnPropertyChanged(); 
       RaisePropertyChanged();  
     } 

你有這個問題的想法?

謝謝。

+1

你可以顯示'SelectedMa'屬性/字段的代碼嗎? – slugster

+0

你可以看看這裏: http://stackoverflow.com/questions/8606994/adding-a-range-of-values-to-an-observablecollection-efficiently –

+0

SelectedMa應該通知變化。請參閱INotifyPropertyChanged示例。 – AnjumSKhan

回答

2

關於您ObservableCollection正在緩慢:

每次添加一個項目ObservableCollectionCollectionChanged是惜售的情況下,通知在這種情況下的意見(這是產生ListCollectionView在綁定到你的MaAcquisition ,這反過來綁定到您的ComboBox)綁定到此ObservableCollection它的Items已更改。 (關於該更多細節here

爲了防止在添加/替換一批元素時每個項目都發生此事件,則必須擴展默認的ObservableCollection類。 Here這是解釋如何做到這一點。

關於你的SelectedMa沒有改變,你確定你爲包含這個屬性的類實現了INotifyPropertyChanged,並且你正在上升它嗎?