我创建了一个具有实时过滤和排序功能的应用程序(当文本框中的文本更改时,列表会动态更改)。我使用了一个绑定到 ObservableCollection 的 ListBox,后来又绑定到了一个 List。它适用于小数据,但是当我使用 1000 个项目时它失败了。
我使用就地QuickSort 进行排序,并使用 Visibility 属性对过滤的项目进行排序。我猜出于性能原因,这将是最好的。
首先,我尝试将 ObservableCollection 绑定到 ListBox。当我快速输入文本时,它引发了异常(检测到布局周期)。
比我尝试使用列表作为 ItemsSource。排序/过滤完成后,我触发了 NotifyPropertyChanged("MyList")。没有例外,但是当文件过滤器短语只导致几个可见项目时。它加载非常慢。
我最终做了一些我不喜欢的事情,因为它看起来真的很业余。
Data.ApplyFiltersSorting();
ItemsListBox.ItemsSource = Data.MyItems.Where(a => a.Visibility == Visibility.Visible);
这实际上工作得很快并且不会导致错误。
有人可以告诉我在我之前的尝试中可能出了什么问题,以及这样做的正确方法是什么?