Программное повторное применение шаблона для элемента ListBox

По сути, у меня есть список цветов и определенный шаблон данных для элемента списка:

<DataTemplate x:Key="colorItemDataTemplate">
    <Border x:Name="borderInner" BorderBrush="Black" BorderThickness="1" Background="{Binding Brush}" Width="11" Height="11" />
</DataTemplate>

Теперь, когда я добавляю кучу элементов в список, а затем устанавливаю свойство ListBox.ItemsSource в свой список, список заполняется правильно.

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

Я мог бы сбросить свойство ItemsSource, но тогда ко всем элементам применяются свои шаблоны, а с более чем 200 элементами в списке это довольно медленно.

Итак, есть ли способ обновить шаблон только для одного элемента из списка?

спасибо


person Kornelije Petak    schedule 21.04.2009    source источник


Ответы (2)


Я не уверен, что следую. Если вы привязали Background к свойству, изменение свойства должно автоматически обновить фон ListBoxItem. Если вы этого не видите, убедитесь, что вы либо используете DependencyProperty, либо реализуете INotifyPropertyChanged.

person Kent Boogaart    schedule 21.04.2009
comment
спасибо, это сработало. Я реализовал INotifyPropertyChanged, и он работает так, как хотелось бы. - person Kornelije Petak; 21.04.2009

Вы можете использовать конвертер привязки. В классе преобразователя у вас может быть некоторая логика, например

(pseudo-code)
if (ListBoxItem.IsSelected)
   return SpecialColorFromSlider
else
   return NormalListBoxColor
person Jacob Adams    schedule 21.04.2009