2016-09-15 5 views
0

У меня проблема с производительностью с наблюдаемой коллекцией. Этого Еогеаспа является переплетен с выпадающим списком (MaAcquisition является наблюдаемой коллекцией):wpf улучшить производительность привязки огромный наблюдаемый сбор

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

С этим Еогеаспом, каждый циклом, я связываю значение выпадающего список, это очень медленно.

Так, чтобы улучшить это я делаю это:

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

Это работает, но после этого «Еогеаспа» я связывающие выбрать «SelectedItem» =>

SelectedMa = MaAcquisition[x - 1]; 

Выбранный элемент переплетены в мой combobox, и он не работает (выбранный элемент пуст).

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

У вас есть идея для этой проблемы?

Thank's.

+1

Можете ли вы показать код для свойства/поля 'SelectedMa'? – slugster

+0

Вы можете заглянуть сюда: http://stackoverflow.com/questions/8606994/adding-a-range-of-values-to-an-observablecollection-efficiently –

+0

SelectedMa должен уведомить об изменениях. См. Примеры INotifyPropertyChanged. – AnjumSKhan

ответ

2

Об ObservableCollection медлительности:

Каждый раз, когда вы добавляете элемент в ObservableCollection, событие CollectionChanged является rised, который информирует мнения (в данном случае это ListCollectionView, который генерируется при привязке к MaAcquisition , что в свою очередь связано с вашим ComboBox), связанным с этим ObservableCollection, что изменилось его Items. (Подробнее об этом here)

Чтобы предотвратить увеличение этого события для каждого элемента при добавлении/замене партии элементов, вам необходимо, например, расширить класс по умолчанию ObservableCollection. Here объясняется, как это сделать.

О вашем SelectedMa не меняется, вы уверены, что вы внедрили INotifyPropertyChanged для класса, который содержит это свойство, и что вы его правильно поднимаете?

Смежные вопросы