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();
}
你对这个问题有什么想法吗?谢谢。
关于你的ObservableCollection
慢:
每次你添加一个项目到ObservableCollection
,事件CollectionChanged
上升,通知视图(在这种情况下,这是一个ListCollectionView
,当你绑定到你的MaAcquisition
,这是反过来绑定到你的ComboBox
)绑定到这个ObservableCollection
,它的Items
发生了变化。(更多细节在这里)
当您添加/替换一批元素时,为了防止每个项目都出现此事件,您必须扩展默认的ObservableCollection
类。下面解释如何做到这一点。
关于你的SelectedMa
没有改变,你确定你实现了INotifyPropertyChanged类包含这个属性,你正在上升它正确吗?