Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据一个属性设置不同的背景?_C#_Wpf_Listview_Listviewitem - Fatal编程技术网

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>