2013-03-11 44 views
3

我有一個觀點DisplayTestsView.cs並在該視圖我有有條件設置一個GridViewColumn細胞模板

<ListView ItemsSource="{Binding SelectedTechnician.Tests}" 
SelectedItem="{Binding SelectedTest}" x:Name="AvailableTestsListView" Height="140"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Id" Width="auto" DisplayMemberBinding="{Binding Id}"/> 
      <GridViewColumn Header="Test" Width="auto" DisplayMemberBinding="{Binding TestTypeName}"/> 
      <GridViewColumn Header="Status" Width="auto" DisplayMemberBinding="{Binding StutusTypeName}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

我想StatusTypeName單元格文本的文本顏色是基於條件的特定顏色。例如,如果StatusTypeName等於「不完整」,那麼我希望單元格中的文本變爲紅色。

測試(實體)作爲一個從視圖中看到該清單是SelectedTechnician.Tests和SelectedTechnician是我的視圖模型(DisplayTestsViewModel的屬性。

我想象一個擁有上GridViewColumn的CellTemplate屬性生效,但對如何有條件地操作模板(一般)沒有深入的瞭解,我不知道從哪裏開始。

即使CellTemplate與它無關如何可以Condititionally設置GridViewColumn的單元格的文本根據上述類似條件改變顏色?

回答

4

您是正確的,CellTemplate是實現顏色更改的正確位置。

你可以做這樣的事情(警告 - 未經測試):

<ListView ItemsSource="{Binding SelectedTechnician.Tests}" 
SelectedItem="{Binding SelectedTest}" x:Name="AvailableTestsListView" Height="140"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Id" Width="auto" DisplayMemberBinding="{Binding Id}"/> 
      <GridViewColumn Header="Test" Width="auto" DisplayMemberBinding="{Binding TestTypeName}"/> 
      <GridViewColumn Header="Status" Width="auto"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock 
          Text="{Binding StatusTypeName}" 
          Foreground="{Binding StatusTypeName, Converter={StaticResource StatusTypeNameToBrushConverter}}" /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
     </GridView> 
    </ListView.View> 
</ListView> 

StatusTypeNameToBrushConverter會是這樣的:

public class StatusTypeNameToBrushConverter : IValueConverter 
{ 
    public object Convert(
     object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var statusTypeName = (string)value; 
     switch (statusTypeName) 
     { 
      case "Incomplete": 
       return Brushes.Red; 
      default: 
       return Brushes.Black; 
     } 
    } 

    public object ConvertBack(
     object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

是否可以再存儲這個邏輯的StatusTypeNameToBrushConverter在視圖模型?如果沒有,這樣的事情可以單獨使用觸發器來完成嗎?我在下班回家的路上閱讀了他們的消息。感謝迄今爲止的大力幫助。 – 2013-03-12 01:06:26

+0

其實,忽略上面的評論,我把它全部弄清楚了,你的答案實際上是開箱即用的。我添加了一個用戶控件資源字典來限定您創建的StaticResource的位置。 – 2013-03-12 16:48:32

+0

如果你認爲這篇文章寫得很好,或者對我的表現進行了很好的研究,不要忘了衝擊/提升我的問題。我總是想知道我什麼時候做的事情是正確的。 – 2013-03-12 16:49:07