WPF Update связывает свойства нескольких элементов, одновременно содержащихся в списке - PullRequest
0 голосов
/ 29 ноября 2010

Я связываю список объектов с ItemsControl, который содержит элемент управления TextBox.

Я хочу иметь возможность изменять цвет фона текстового поля на основе свойства цвета фона объекта связывания.

Он отлично работает с интерфейсом INotifyPropertyChanged, но когда мне нужно обновить, скажем, 1000 объектов, это занимает огромное количество времени, я полагаю, потому что ему нужно обновить элементы управления по одному.подсказка для меня, скажем, обновить цвет фона всех моих объектов и затем обновить привязку за один снимок вместо объекта за объектом?

Спасибо,

Мат

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Если вы используете виртуализацию, вам нужно будет только обновить видимые элементы - обычно элементы управления элементами отслеживают изменения свойств только тех элементов, которые в данный момент видимы.Однако, если вы используете базу 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>

Виртуализация повышает производительность при большом количестве элементов списка различными способами.Это должно помочь вашему сценарию, но может также улучшить другие аспекты производительности.Это не без проблем, но я бы определенно попробовал здесь сначала, прежде чем пытаться найти другие решения.

0 голосов
/ 30 ноября 2010

Наконец-то я понял, почему так долго обновлялся мой интерфейс. Кстати, то, чего я пытаюсь достичь, это своего рода сетка электронных таблиц. Моим контейнером с клеткой была граница с видимыми границами. Я обновлял цвет фона пограничного контроля на основе выбора ячеек. Отключение границ пограничного контроля решило мою проблему сразу. Время обновления пользовательского интерфейса изменилось с 4-5 секунд до мгновенного.

Спасибо, ребята, за ваш ответ, я все же постараюсь реализовать ваше предложение, чтобы еще больше улучшить мой проект.

Спасибо

Мат

...