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

WPF同时更新列表中包含的多个项的绑定属性,wpf,list,binding,properties,Wpf,List,Binding,Properties,我正在将对象列表绑定到包含TextBox控件的ItemsControl 我希望能够根据绑定对象的背景色属性更改文本框背景色 它与INotifyPropertyChanged接口完美配合,但当我需要更新1000个对象时,我想这需要花费大量时间,因为它需要逐个更新控件 有没有人给我一个提示,比如说,更新所有对象的背景色,然后一次更新绑定,而不是逐个对象更新绑定 谢谢 Mat如果使用虚拟化,它只需要更新可见的项目-通常项目控件将只跟踪当前可见项目的属性更改。但是,如果您使用的是基本ItemsContr

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

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

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

有没有人给我一个提示,比如说,更新所有对象的背景色,然后一次更新绑定,而不是逐个对象更新绑定

谢谢


Mat

如果使用虚拟化,它只需要更新可见的项目-通常项目控件将只跟踪当前可见项目的属性更改。但是,如果您使用的是基本
ItemsControl
,则默认情况下虚拟化将关闭。要打开它,您需要提供一个自定义模板,其中包括一个
ScrollViewer
,将
CanContentScroll
设置为
True
,并且您还需要在控制模板中或通过
ItemsPanel
使用
VirtualizangStackPanel
-这显示了前一种方法:

<ItemsControl ItemsSource="...whatever...">
  <ItemsControl.Template>
    <ControlTemplate TargetType="ItemsControl">
      <ScrollViewer CanContentScroll="True">
        <VirtualizingStackPanel IsItemsHost="True" />
      </ScrollViewer>
    </ControlTemplate>
  </ItemsControl.Template>
</ItemsControl>


虚拟化以各种方式通过大量列表项提高性能。它应该有助于您的场景,但也可能会提高性能的其他方面。它并非没有问题,但在尝试其他解决方案之前,我肯定会先在这里试用。

我终于找到了为什么我花了这么长时间更新UI的原因。顺便说一句,我想实现的是一种电子表格网格。我的手机容器是一个边框,边框可见。我正在根据单元格选择更新边界控件背景颜色。禁用边界控制的边界立即解决了我的问题。UI更新时间从4-5秒变为瞬间

谢谢你们的回答,我仍然会尝试实施你们的建议来改进我的项目

谢谢


Mat

您是使用“BackgroundColor”属性名称还是使用null触发PropertyChanged事件?通常,您应该使用ItemTemplate根据项目中的属性设置项目背景颜色的样式,而不是将颜色显式地作为绑定到的对象中的颜色。还请注意,使用从VirtualzingStackPanel(例如ListBox)派生的控件而不是ItemsControl可以免费获得UI虚拟化(除非用户可以看到它们,否则它不会更新所有UI对象),我正在使用属性名称“BackgroundColor”触发PropertyChanged事件