我有ListView
ItemSource
bindend到ObservableCollection<Period>
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
的背景:added-green / deleted-red / edited-yellow / none-default。在这里找到了很多解决方案,但没有提供我的解决方案。如果存在问题,请发表评论,我将关闭此
[编辑]
我希望以这种方式使用DataTemplate
:创建使用Background
属性创建绑定的模板和使用转换器的Status
创建Period
。但不知道如何保持其余的设计
答案 0 :(得分:1)
请DataTrigger
Background
Style
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>
</ListView>
属性{{1}}:您不需要转换器,请使用枚举值而不是整数值。)
{{1}}
答案 1 :(得分:1)
最简单的方法是在Triggers
中使用ListView.ItemContainerStyle
。
<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
中使用它。
答案 2 :(得分:0)
我发现拥有专用的PeriodStatusColor只读属性更容易,更少'纯xaml',是的,但代码更少,所有代码都在同一个地方。所以这个属性只返回当前PeriodStatus的颜色。在PeriodStatus更改时,还要引发PeriodStatusColor PropertyChanged。使用静态冷冻颜色,也可以使用PeriodStatus - &gt; Color static Dictionnary有干净的代码。