以编程方式为ListBox项应用模板

时间:2009-04-21 12:50:39

标签: c# wpf listbox templates

基本上,我有一个颜色列表和listbox项目的已定义datatemplate:

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

现在,当我将一堆项目添加到列表框中,然后将ListBox.ItemsSource属性设置为我的列表时,列表框已正确填充。

还有一个带有相应事件处理程序的滑块。在事件处理程序中,列表框中某个项的Brush属性已更改。由于项目的外观取决于Brush属性,因此列表框应反映更改。

我可以重置ItemsSource属性,但是然后所有项目都应用了模板,并且列表框中有超过200个项目,这非常慢。

那么,有没有办法只从列表框中刷新一个项目的模板?

感谢名单

2 个答案:

答案 0 :(得分:1)

我不确定我会效仿。如果您已将Background绑定到属性,则更改属性应自动更新ListBoxItem的背景。如果您没有看到,请确保您使用DependencyProperty或实施INotifyPropertyChanged

答案 1 :(得分:0)

您可以使用绑定转换器。在转换器类中,您可以使用某些逻辑,如

(pseudo-code)
if (ListBoxItem.IsSelected)
   return SpecialColorFromSlider
else
   return NormalListBoxColor