C# 如何根据一个属性设置不同的背景?
我有C# 如何根据一个属性设置不同的背景?,c#,wpf,listview,listviewitem,C#,Wpf,Listview,Listviewitem,我有ListView其中ItemSourcebindend到observedcollection其中Period是 public class Period : INotifyPropertyChanged { //some stuff // public Status PeriodStatus { get; set; } #region PropertyChangedEventHandler members
ListView
其中ItemSource
bindend到observedcollection
其中Period
是
public class Period : INotifyPropertyChanged
{
//some stuff
//
public Status PeriodStatus
{
get;
set;
}
#region PropertyChangedEventHandler members
public void SendPropertyChanged(string name)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
public enum Status
{
None,
Added,
Deleted,
Edited
}
我想按以下顺序设置每个ListViewItem
的背景:添加绿色/删除红色/编辑黄色/无默认值。在这里找到了很多解决方案,但没有提供我的解决方案。如果存在问题,请发表评论,我将关闭此窗口
[编辑]
我想以这种方式使用
DataTemplate
:创建模板,该模板使用Background
属性和Status
在期间创建绑定,该期间使用转换器。但是不知道如何保留其余的设计请在列表视图项
的样式
中的背景
属性使用数据触发器
(:您不需要转换器,使用枚举值而不是整数值)
最简单的方法是在列表视图中使用触发器
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=PeriodStatus}" Value="Added">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=PeriodStatus}" Value="Deleted">
<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=PeriodStatus}" Value="Edited">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
<Style.Triggers>
<Style>
<ListView.ItemContainerStyle>
这是一个示例代码:您可能需要在enum
中添加一个名称空间,以便在XAML
中使用它。我发现使用一个专用的PeriodStatusColor只读属性更容易,不需要“纯XAML”,是的,但代码更少,所有代码都在同一个位置。所以这个属性只返回当前状态的颜色。在PeriodStatus更改时,还将引发PeriodStatusColor属性更改。使用静态冻结颜色,也可以使用PeriodStatus-->颜色静态词汇表来获得干净的代码。您可以使用转换器/样式&触发器/数据模板。。。。你已经试过什么了?我想不行。必须为ListViewItem
(而不是ListView
类)定义样式。
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=PeriodStatus}" Value="Added">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=PeriodStatus}" Value="Deleted">
<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=PeriodStatus}" Value="Edited">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
<Style.Triggers>
<Style>
<ListView.ItemContainerStyle>