2015-07-02 1 views
0

У меня небольшая проблема с WPF Datagrid. Источник данных моей таблицы данных в таблице SQL называется Case, однако в коде есть несколько свойств, добавленных в Case. Одним из них является ColorForTAT, который содержит логику для раскраски, однако это свойство не должно быть видимым для пользователя.
До сих пор мне удалось заставить его работать для установки цвета фона для полной строки, однако то, что мне было предложено сделать, - это окрашивать только один столбец (Name = "TimeTillTatExternal). Я пытался Google это, но ничего не могли найти работу.Формат WPF Datagrid на одну ячейку на основе коэнтов другой ячейки

 <DataGrid Name="DataGridCase" AutoGenerateColumns="False" IsReadOnly="True" Grid.Row="9" Grid.RowSpan="3" Grid.ColumnSpan="10" VerticalAlignment="Top" Margin="10,0" SelectionChanged="DataGridCase_SelectionChanged"> 
     <DataGrid.Columns> 
      <DataGridTextColumn x:Name="CaseNumber" Binding="{Binding CaseNumber }" Header="Case Number"/> 
      <DataGridTextColumn x:Name="Status" Binding="{Binding FinalStatus }" Header="Tool status"/> 
      <DataGridTextColumn x:Name="Title" Binding="{Binding Title }" Header="Title"/> 
      <DataGridTextColumn x:Name="Country" Binding="{Binding CountryFromAssignemnt }" Header="Country"/> 
      <DataGridTextColumn x:Name="CreatedDate" Binding="{Binding CreatedDate, StringFormat = 'dd/MM/yyyy HH:mm' }" Header="Created date"/> 
      <DataGridTextColumn x:Name="TATExternal" Binding="{Binding TATExternal, StringFormat = 'dd/MM/yyyy HH:mm' }" Header="Due date External"/> 
      <DataGridTextColumn x:Name="TATInternal" Binding="{Binding TATInternal, StringFormat = 'dd/MM/yyyy HH:mm' }" Header="Due date Internal"/> 
      <DataGridTextColumn x:Name="Assignment" Binding="{Binding Assignment }" Header="Assignment"/> 
      <DataGridTextColumn x:Name="TimeTillTatExternal" Binding="{Binding TimeTillTatExternal }" Header="Days left"/> 
      <DataGridTextColumn x:Name="Status3" Binding="{Binding LinkedIncident }" Header="LinkedIncident "/> 
      <DataGridTextColumn x:Name="Status4" Binding="{Binding ExternalSupport}" Header="ExternalSupport"/> 
      <DataGridTextColumn x:Name="Status2" Binding="{Binding SDStatus }" Header="Service Desk Status"/> 
     </DataGrid.Columns> 
     <DataGrid.ItemContainerStyle> 
      <Style TargetType="{x:Type DataGridRow}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ColorForTAT }" Value="black"> 
         <Setter Property="Background" Value="Gray"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding ColorForTAT }" Value="gray"> 
         <Setter Property="Background" Value="LightGray"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding ColorForTAT }" Value="red"> 
         <Setter Property="Background" Value="Red"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding ColorForTAT }" Value="yellow"> 
         <Setter Property="Background" Value="Yellow"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding ColorForTAT }" Value="green"> 
         <Setter Property="Background" Value="Green"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.ItemContainerStyle> 
    </DataGrid> 

ответ

0

вам необходимо установить для каждого столбца CellStyle и связать Предыстория статический ресурс, который вы можете объявить в Window.Resources: Пример кода показан ниже, пожалуйста, измените код в соответствии с вашими требованиями.

<Window x:Class="WpfApplication1.MainWindow" ...> 
<Window.Resources> 
    <SolidColorBrush x:Key="clBr" Color="White" /> 
</Window.Resources> 

...

Колонны:

<DataGridTextColumn Header="First Name" 
           Binding="{Binding Path=FirstName}"> 
      <DataGridTextColumn.CellStyle> 
       <Style TargetType="DataGridCell"> 
        <Setter Property="Background" 
          Value="{StaticResource clBr}" /> 
       </Style> 
      </DataGridTextColumn.CellStyle> 
     </DataGridTextColumn> 

, то вы можете просто манипулировать статический ресурс либо кода или XAML манипуляции.

Смежные вопросы