gpt4 book ai didi

c# - 列表框项目WPF,不同项目的不同背景颜色

转载 作者:太空狗 更新时间:2023-10-29 17:40:18 34 4
gpt4 key购买 nike

我有一个 WPF 列表框,其中包含我拥有的特定类中的项的绑定(bind)列表。像这样:

    ObservableCollection<MyTable> tables = new ObservableCollection<MyTable>();
...
listTables.ItemsSource = tables;

XAML:

<ListBox HorizontalAlignment="Left" Margin="8,10,0,0" Name="listTables" Width="153" ItemsSource="{Binding tables}" SelectionChanged="listTables_SelectionChanged" Height="501" VerticalAlignment="Top">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="1">
<TextBlock Grid.Column="1" Text="{Binding tableName}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

一切正常。我现在想要做的是根据类的某个属性为 ListBox 中的每个项目设置不同的背景。例如,假设 MyTable 类有一个名为 isOccupied 的属性。如果为某个项目设置了这个标志,我希望它在 ListBox 中有一个红色背景,如果没有,那么我想让它有一个绿色背景。如果属性改变,那么背景也应该相应改变。

关于如何实现这一目标的任何提示?我目前正在查找有关 ItemContainerStyle 的一些信息,但我对此比较陌生,所以我不确定我是否遵循了正确的路径。

最佳答案

您可以使用 DataTriggers 来实现

<ListBox.ItemTemplate>
<DataTemplate>

<!-- Step #1: give an x:Name to this Grid -->
<Grid Margin="1" x:Name="BackgroundGrid">
<TextBlock Grid.Column="1" Text="{Binding tableName}" />
</Grid>

<!-- Step #2: create a DataTrigger that sets the Background of the Grid, depending on the value of IsOccupied property in the Model -->
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsOccupied}" Value="True">
<Setter TargetName="BackgroundGrid" Property="Background" Value="Red"/>
</DataTrigger>

<DataTrigger Binding="{Binding IsOccupied}" Value="False">
<Setter TargetName="BackgroundGrid" Property="Background" Value="Green"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>

请记住,如果您希望这些值在运行时发生变化,您的数据项必须正确实现并引发 Property Change Notifications :

public class MyTable: INotifyPropertyChanged //Side comment: revise your naming conventions, this is not a table.
{
private bool _isOccupied;
public bool IsOccupied
{
get { return _isOccupied; }
set
{
_isOccupied = value;
NotifyPropertyChange("IsOccupied");
}
}

//.. Other members here..
}

关于c# - 列表框项目WPF,不同项目的不同背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099694/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com