2016-12-08 3 views
0

私のアプリケーションには、単一のSQLデータベーステーブルから観察可能なオブジェクトのコレクションにバインドされたDataGridが含まれています。列の1つに日付と時間が含まれていて、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.RowStyleDataTriggerで始まりましたが、私はそれが取るべき最善のルートかどうかわかりません。どんな提案や参考資料も高く評価されます。

答えて

0

要件読み:

私は30分よりも古い行を強調したいと思います。

Iが異なる溶液に来る:

バインドDateTime列の行の背景色と(ブラシ)に日時をオンValueConverterを適用します。

関連する問題