WPF同时更新列表中包含的多个项目的绑定属性

时间:2010-11-29 15:16:01

标签: wpf list binding properties

我正在将一个对象列表绑定到一个包含TextBox控件的ItemsControl。

我希望能够根据绑定对象的背景颜色属性更改文本框背景颜色。

它与INotifyPropertyChanged接口完美配合,但是当我需要更新时,让我说1000个对象需要花费大量时间,因为它需要逐个更新控件。

有人给我一个提示,让我说,更新我的所有对象背景颜色,而不是一次性更新对象而不是逐个对象?

谢谢,

2 个答案:

答案 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秒变为瞬时。

谢谢你们的回答,我仍然会尝试实施你的建议,以进一步改善我的项目。

由于