2017-08-29 3 views
0

J'ai une grille de données (Xceed community edition version 3.1.0) contenant des informations générales sur les factures. L'un des champs contient la date d'échéance de la facture. Je veux avoir une couleur différente pour les lignes avec une date d'échéance expirée. Pour ce faire, j'utilise un convertisseur de valeur. Voici mon XAML:Xceed datagrid - change la couleur de la datarow en fonction de la valeur DateTime

<dg:DataGridControl.Resources> 
    <Style TargetType="{x:Type dg:DataRow}" BasedOn="{StaticResource DefaultDataRowStyle}"> 
     <Setter Property="Background" Value="{Binding DocumentDueDate, Converter={StaticResource DueDateToBrushConverter}}"/> 
     <!--<Setter Property="Background" Value="OrangeRed"/>--> 
    </Style> 
</dg:DataGridControl.Resources> 

<dg:DataGridControl.Columns> 
    <dg:Column Title="{bx:LocalizeBinding Type, Global=True}" FieldName="MovementType" Width="45"/> 
    <dg:Column Title="{bx:LocalizeBinding Number, Global=True }" FieldName="DocumentNumber" Width="90"/> 
    <dg:Column Title="{bx:LocalizeBinding Date, Global=True }" FieldName="DocumentDate" Width="90"/> 
    <dg:Column Title="{bx:LocalizeBinding DueDate, Global=True }" FieldName="DocumentDueDate" Width="90"/> 
    <dg:Column Title="{bx:LocalizeBinding Debit, Global=True }" FieldName="Debit" CellHorizontalContentAlignment="Right" Width="80"> 
     <dg:Column.CellContentTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding StringFormat=N2}" HorizontalAlignment="Right"/> 
      </DataTemplate> 
     </dg:Column.CellContentTemplate> 
    </dg:Column> 
    <dg:Column Title="{bx:LocalizeBinding Credit, Global=True }" FieldName="Credit" CellHorizontalContentAlignment="Right" Width="80"> 
     <dg:Column.CellContentTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding StringFormat=N2}" HorizontalAlignment="Right"/> 
      </DataTemplate> 
     </dg:Column.CellContentTemplate> 
    </dg:Column> 
    <dg:Column Title="{bx:LocalizeBinding Balance, Global=True }" FieldName="Balance" CellHorizontalContentAlignment="Right"> 
     <dg:Column.CellContentTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding StringFormat=N2}" HorizontalAlignment="Right"/> 
      </DataTemplate> 
     </dg:Column.CellContentTemplate> 
    </dg:Column> 
    <dg:Column Title="{bx:LocalizeBinding Difference, Global=True }" FieldName="Difference" CellHorizontalContentAlignment="Right"> 
     <dg:Column.CellContentTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding StringFormat=N2}" HorizontalAlignment="Right"/> 
      </DataTemplate> 
     </dg:Column.CellContentTemplate> 
    </dg:Column> 
    <dg:Column Title="{bx:LocalizeBinding Currency, Global=True }" FieldName="Currency" Width="70"/> 
    <dg:Column Title="{bx:LocalizeBinding Description, Global=True }" FieldName="Description" Width="250" TextWrapping="Wrap"> 
    </dg:Column> 
</dg:DataGridControl.Columns> 

<dg:DataGridControl.View> 
    <dg:TableView/> 
</dg:DataGridControl.View> 

Et voici ma classe de conversion:

public class DueDateToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     DateTime? input = value as DateTime?; 
     if (input.HasValue && input < DateTime.Now) 
      return Brushes.OrangeRed; 
     else 
      return Brushes.Transparent; 
    } 

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

Je mets un point d'arrêt dans le convertisseur et le code est exécuté, mais la couleur de la ligne ne change pas. Définir la couleur à une couleur fixe (comme dans la ligne commentée) fonctionne très bien. Je n'ai aucune idée de ce que je fais de mal. Toute aide serait très appréciée.

Répondre

0

Essayez avec un DataTrigger à la place:

<dg:DataGridControl.Resources> 
    <Style TargetType="{x:Type dg:DataRow}" BasedOn="{StaticResource DefaultDataRowStyle}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=DataContext.DocumentDueDate, Converter={StaticResource ResourceKey=DueDateToBrushConverter}}" Value="true"> 
       <Setter Property="Background" Value="OrangeRed" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</dg:DataGridControl.Resources> 

Et le convertisseur:

public class DueDateToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     DateTime? input = value as DateTime?; 
     if (input.HasValue && input < DateTime.Now) 
      return true; 
     else 
      return false; 
    } 

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