我正在将一个对象列表绑定到一个包含TextBox控件的ItemsControl。
我希望能够根据绑定对象的背景颜色属性更改文本框背景颜色。
它与INotifyPropertyChanged接口完美配合,但是当我需要更新时,让我说1000个对象需要花费大量时间,因为它需要逐个更新控件。
有人给我一个提示,让我说,更新我的所有对象背景颜色,而不是一次性更新对象而不是逐个对象?
谢谢,
垫
答案 0 :(得分:1)
如果您使用虚拟化,则只需更新可见的项目 - 通常,项目控件只会跟踪当前可见项目的属性更改。但是,如果您使用基础ItemsControl
,则默认情况下将关闭虚拟化。要启用此功能,您需要提供一个自定义模板,其中包含ScrollViewer
CanContentScroll
设置为True
,您还需要使用VirtualizingStackPanel
,控制模板,或通过ItemsPanel
- 这显示了前一种方法:
<ItemsControl ItemsSource="...whatever...">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<ScrollViewer CanContentScroll="True">
<VirtualizingStackPanel IsItemsHost="True" />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
虚拟化以各种方式提高了大量列表项的性能。它应该有助于您的方案,但它也可能改善性能的其他方面。它并非没有问题,但在尝试其他解决方案之前,我肯定会先尝试一下。
答案 1 :(得分:0)
我终于找到了为什么我花了这么长时间来更新我的UI。顺便说一句,我想要实现的是一种电子表格网格。我的细胞容器是边框可见的边框。我正在根据单元格选择更新边框控件背景颜色。禁用边框控件的边框立即解决了我的问题。 UI更新时间从4-5秒变为瞬时。
谢谢你们的回答,我仍然会尝试实施你的建议,以进一步改善我的项目。
由于
垫