【问题标题】:wpf improve performance binding huge observablecollectionwpf 提高性能绑定巨大的 observablecollection
【发布时间】:2016-09-15 11:32:49
【问题描述】:

我在使用可观察集合时遇到了性能问题。 这个 foreach 与一个组合框绑定(MaAcquisition 是一个可观察的集合):

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

你对这个问题有什么想法吗?

谢谢。

【问题讨论】:

标签: c# wpf mvvm combobox


【解决方案1】:

关于你的ObservableCollection 慢:

每次您向ObservableCollection 添加项目时,都会引发事件CollectionChanged 来通知视图(在这种情况下,这是一个ListCollectionView,当您绑定到您的MaAcquisition 时生成,即反过来绑定到您的ComboBox) 绑定到此ObservableCollection,它的Items 已更改。 (有关here的更多详细信息)

为防止在添加/替换一批元素时为每个项目引发此事件,例如,您必须扩展默认的 ObservableCollection 类。 Here 解释了如何做到这一点。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2010-11-03
    • 2018-05-14
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多