【问题标题】:Reapplying template for ListBox item programatically以编程方式为 ListBox 项应用模板
【发布时间】:2009-04-21 12:50:39
【问题描述】:

基本上,我有一个颜色列表和一个为列表框项目定义的数据模板:

<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 多个项目,这很慢。

那么,有什么方法可以只刷新列表框中一项的模板?

感谢

【问题讨论】:

    标签: c# wpf listbox templates


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这行得通。我实现了 INotifyPropertyChanged,它可以按需要工作。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多