2016-12-08 127 views
0

我的應用程序包含綁定到來自單個SQL數據庫表的可觀察集合的對象的數據網格。一旦列包含日期和時間,我想突出顯示超過30分鐘的行。如何使用MVVM突出顯示基於DateTime的DataGrid行

XAML

<!--DataGrid style--> 
<Style x:Key="DataGridStyle" TargetType="{x:Type DataGrid}"> 
    <Setter Property="ColumnHeaderStyle" Value="{DynamicResource ColumnHeaderStyle}"/> 
    <Setter Property="CellStyle" Value="{DynamicResource DataGridCellStyle}"/> 
</Style> 
<!--DataGridColumnHeader style--> 
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    <Setter Property="MinHeight" Value="25"/> 
    <Setter Property="Background" Value="#FFE5ECEF"/> 
</Style> 

<DataGrid x:Name="licenseGrid" 
     ItemsSource="{Binding LoggedUsers}" 
     SelectedItem="{Binding SelectedLicenses}" 
     Style="{DynamicResource DataGridStyle}" 
     Grid.Row="5" 
     Grid.Column="2" 
     Grid.ColumnSpan="7" 
     Height="525" 
     VerticalAlignment="Top" 
     IsReadOnly="True" 
     AutoGenerateColumns="False" 
     HeadersVisibility="Column" 
     SelectionMode="Extended" 
     CanUserDeleteRows="True" 
     EnableRowVirtualization="False"> 
    <DataGrid.RowStyle> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsGhost}" Value="true"> 
        <Setter Property="Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    <DataGrid.CellStyle> 
     <Style TargetType="{x:Type DataGridCell}"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="Background" Value="#FFCBE8F6"/> 
        <Setter Property="Foreground" Value="Black"/> 
        <Setter Property="BorderBrush" Value="#FFCBE8F6"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.CellStyle> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Button x:Name="revokeBtn" 
         ToolTip="Revoke Selected License or Licenses" 
         Content="Revoke" 
         Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.RevokeSelectedCommand}" 
         CommandParameter="{Binding}"> 
        </Button> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTextColumn Header="Computer" Binding="{Binding machineName}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="Background" Value="#FFE5ECEF"/> 
        <Setter Property="MinWidth" Value="90"/> 
        <Setter Property="Margin" Value="3"/> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Windows User" Binding="{Binding userName}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="Background" Value="#FFE5ECEF"/> 
        <Setter Property="MinWidth" Value="95"/> 
        <Setter Property="Margin" Value="3"/> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="MediaDent User" Binding="{Binding userId}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="Background" Value="#FFE5ECEF"/> 
        <Setter Property="MinWidth" Value="90"/> 
        <Setter Property="Margin" Value="3"/> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Session ID" Binding="{Binding tsSessionId}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="Background" Value="#FFE5ECEF"/> 
        <Setter Property="MinWidth" Value="65"/> 
        <Setter Property="Margin" Value="3"/> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Application" Binding="{Binding appId}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="Background" Value="#FFE5ECEF"/> 
        <Setter Property="MinWidth" Value="65"/> 
        <Setter Property="Margin" Value="3"/> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Date In" Binding="{Binding dateIn}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="Background" Value="#FFE5ECEF"/> 
        <Setter Property="MinWidth" Value="135"/> 
        <Setter Property="Margin" Value="3"/> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Last Ping" Binding="{Binding lastPing}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Setter Property="Background" Value="#FFE5ECEF"/> 
        <Setter Property="MinWidth" Value="135"/> 
        <Setter Property="Margin" Value="3"/> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Record ID" Binding="{Binding Id}" Visibility="Hidden"/> 
    </DataGrid.Columns> 
</DataGrid> 

正如你所看到的,我已經開始用DataGrid.RowStyle一個DataTrigger但我不知道這是採取的最佳路線。任何建議或參考將不勝感激。

回答

0

當讀要求:

我想強調的是有超過30分鐘,年齡越大行。

我會得出不同的解決方案:

綁定排至DateTime列的背景和施加ValueConverter了轉動日期時間爲彩色(刷)。