2016-09-15 68 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,并且你正在上升它吗?