【发布时间】:2020-07-13 12:43:15
【问题描述】:
我正在开发一个 WPF 应用程序,其中我有一个组合框,其中 ItemsSource 绑定到来自数据库的 5000 条记录的属性。问题是当我单击组合框的下拉箭头时,UI 没有响应或组合框需要太多时间来响应。我搜索了它,但对我没有任何帮助。
代码如下:
<ComboBox IsEditable="True" ItemsSource="{Binding List,Mode=OneWay}" DisplayMemberPath="name" SelectedValue="{Binding SelectedItem,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
和属性
private ObservableCollection<Object> _List = new ObservableCollection<Object>();
public ObservableCollection<Object> List
{
get { return _List ; }
set { _List = value; OnPropertyChanged("List"); }
}
编辑: 这是在构造函数中加载数据的代码
public FormVM()
{
List = new ObservableCollection<Object>(db.cat.ToList());
}
【问题讨论】:
-
请提供一个“可重现”的问题。这段代码运行速度快如闪电。
-
是提前从数据库加载数据还是响应打开组合框?我们需要查看演示问题的代码。
-
@Erno 提前从数据库加载的数据。我在构造函数中加载了数据
-
@Bizhan 代码正在运行,但 UI 需要很长时间才能响应
-
正如我所说,您的问题是“不可重现的”。所以对我们来说没有问题。一切都很好。如果我在
name的 getter 上放置一个 thread.sleep,我会看到你解释的内容,但如果没有进一步的信息,我们无法帮助你