2013-10-22 73 views
0

讓我首先說我是MVVM的新手,所以請裸露出來,如果問題不清楚,請告訴我,我會盡力澄清。顏色編碼ListView中的每一行

我有一個成功綁定ListView的按鈕。 (它填充listView)。下面 是按鈕VM代碼:

<Button Content="Fetch Data" Command="{Binding readFilesCommand}" CommandParameter="{Binding Path=Text, ElementName=browseFolderTextBox}" Name="button1" /> 

正被填充看起來像這樣ListView中:

<ListView SelectionMode="Extended" Name="responseListView" ItemsSource="{Binding}" GridViewColumnHeader.Click="responseListViewClick" > 
    <ListView.Resources> 
     <local:IndexConverter x:Key="IndexConverter" /> 
     <DataTemplate x:Key="OrdinalColumnDataTemplate"> 
      <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}, 
       Converter={StaticResource ResourceKey=IndexConverter}}" HorizontalAlignment="Right" /> 
     </DataTemplate> 
    </ListView.Resources> 
    <ListView.View> 
     <GridView x:Name="gridView2" AllowsColumnReorder="True"> 
      <GridViewColumn Width="28" Header="#" CellTemplate="{StaticResource ResourceKey=OrdinalColumnDataTemplate}" /> 
      <GridViewColumn Width="80" DisplayMemberBinding="{Binding Name}" Header="Name" /> 
      <GridViewColumn Width="150" DisplayMemberBinding="{Binding EMail}" Header="EMail" /> 
      <GridViewColumn Width="75" DisplayMemberBinding="{Binding Date}" Header="Date" /> 
      <GridViewColumn Width="75" DisplayMemberBinding="{Binding Time}" Header="Time" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

下面是被填充在ListView類的代碼。

public class ResourceList : ObservableCollection<Resource> 
{ 
    public ResourceList() : base() 
    { 
    } 
} 

public class Resource : INotifyPropertyChanged 
{ 
    public Resource() 
    { 
     Name = ""; 
     EMail = ""; 
     Date = ""; 
     Time = ""; 
     SWList = new ObservableCollection<string>(); 
    } 

    private string name; 
    private string eMail; 
    private string time; 
    private string date; 

    public string Name 
    { 
     get { return name;} 
     set 
     { 
      if(name != value) 
      { 
       name = value; 
       OnPropertyChanged("Name"); 
      } 
     } 
    } 

    public string EMail 
    { 
     get { return eMail; } 
     set 
     { 
      if (eMail != value) 
      { 
       eMail = value; 
       OnPropertyChanged("EMail"); 
      } 
     } 
    } 

    public string Date 
    { 
     get { return date;} 
     set 
     { 
      if (date != value) 
      { 
       date = value; 
       OnPropertyChanged("Date"); 
      } 
     } 
    } 

    public string Time 
    { 
     get { return time; } 
     set 
     { 
      if (time != value) 
      { 
       time = value; 
       OnPropertyChanged("Time"); 
      } 
     } 
    } 

    // This interface causes the View to be notified of changes to the instances of Resource. 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if(handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public ObservableCollection<string> SWList { get; set; } 
} 

// ObservableCollection notifies the View of changes to the collection (add, delete, move items) 
public class Licenses : ObservableCollection<Licenses> 
{ 
    public Licenses() 
    { 
    } 
    public string Name { get; set; } 
    public string License { get; set; } 
} 

到目前爲止一切正常。現在到我的問題。我希望ListView的每一行都具有背景顏色。可以說屬性時間缺少一行,那麼我希望整行是紅色的。我應該從哪裏開始?

+0

WPF? Silverlight? WinRT? – JYL

+0

@JYL,對不起。 WPF – theAlse

回答

0

您可以用一個容器(使用模板執行)圍繞每個ListViewItem,並使用綁定或DataTrigger更改此容器的背景顏色。

一個例子在這裏:Change background color of GridView row in a ListView

編輯:根據MVVM,你應該在你的Resource類中定義的業務性質,類型,例如boolean(IsValid的?)或枚舉(狀態?),並使用一個轉換器在您的Binding中將該值轉換爲SolidColorBrush(例如)。