WPF提高了绑定大量可观察集合的性能

本文关键字:观察 集合 性能 绑定 WPF | 更新日期: 2023-09-27 18:07:03

我有一个可观察集合的性能问题。这个foreach被绑定到一个组合框(MaAcquisition是一个可观察集合):

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

使用这个foreach, every循环,我将value绑定到combobox,它非常慢。

为了改进这个,我这样做:

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();     
        }
你对这个问题有什么想法吗?

谢谢。

WPF提高了绑定大量可观察集合的性能

关于你的ObservableCollection慢:

每次你添加一个项目到ObservableCollection,事件CollectionChanged上升,通知视图(在这种情况下,这是一个ListCollectionView,当你绑定到你的MaAcquisition,这是反过来绑定到你的ComboBox)绑定到这个ObservableCollection,它的Items发生了变化。(更多细节在这里)

当您添加/替换一批元素时,为了防止每个项目都出现此事件,您必须扩展默认的ObservableCollection类。下面解释如何做到这一点。

关于你的SelectedMa没有改变,你确定你实现了INotifyPropertyChanged类包含这个属性,你正在上升它正确吗?