0

私はどこにバインドエンドを持ってListViewいますItemSourceObservableCollection<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順序で設定したいと思います:追加-緑/削除-赤/編集-黄色/なし-デフォルト。ここで多くの解決策が見つかりましたが、私の解決策を提供しませんでした。質問がある場合はコメントしてください。これを閉じます

[編集] 私はこのように使用したかった:プロパティと のバインディングを作成し、コンバーターを使用DataTemplateするテンプレートを作成します。しかし、残りのデザインを維持する方法を知りませんでしたBackgroundStatusPeriod

4

3 に答える 3

1

ofのプロパティにDataTriggersを使用してください(この質問の例:コンバーターは必要ありません。整数値の代わりに列挙値を使用してください)。BackgroundStyleListViewItem

<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>
于 2012-08-06T07:57:38.413 に答える
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

于 2012-08-06T07:59:25.660 に答える
0

専用のPeriodStatusColor読み取り専用プロパティを使用する方が簡単で、「純粋なxaml」は少なくなりますが、コードは少なくなり、すべてのコードを同じ場所に配置できます。したがって、このプロパティは現在のPeriodStatusの色を返すだけです。PeriodStatusの変更時に、PeriodStatusColorPropertyChangedも発生させます。静的なフリーズカラーを使用し、PeriodStatus-> ColorstaticDictionnaryを使用してクリーンなコードを作成します。

于 2012-08-06T09:57:02.683 に答える