2012-08-06 133 views
0

我有ListViewItemSource 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的設置背景:加入綠色/刪除紅色/編輯黃/沒有違約。在這裏找到很多解決方案,但沒有提供我的解決方案。如果存在問題,請評論,我會關閉這

[編輯] 我想以這種方式來使用DataTemplate:創建其創建與PeriodBackground財產和Status它使用轉換器綁定模板。但不知道如何保持設計的其餘部分

+0

你可以使用'Converter' /'Style'&'Trigger' /'DataTemplate' ....你已經試過了什麼? – 2012-08-06 07:53:45

回答

1

請使用DataTrigger S爲Background財產的ListViewItemStyleexample in this question:你不需要轉換器,使用枚舉值,而不是整數值)。

<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

最簡單的一種是在你的ListView.ItemContainerStyle使用Triggers

<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> 

這是一個示例代碼:您可能需要添加一個命名空間與您的enumXAML使用它。

+1

我認爲這是行不通的。風格必須爲ListViewItem(而不是ListView類)定義。 – 2012-08-06 08:02:21

+0

是的,你是對的。我修復了我的答案。 – STiLeTT 2012-08-06 08:06:14

0

我發現更容易擁有一個專用的PeriodStatusColor只讀屬性,更少的'純xaml',是的,但代碼少,所有代碼在同一個地方。所以這個屬性只是返回當前PeriodStatus的顏色。在PeriodStatus更改時,還會引發一個PeriodStatusColor PropertyChanged。使用靜態凍結的顏色,也可以使用PeriodStatus - > Color static Dictionnary來獲得乾淨的代碼。

相關問題