2017-08-29 2 views
0

一般的な請求書情報を含むデータグリッド(Xceedコミュニティエディションバージョン3.1.0)があります。項目の1つに請求書の支払期日が含まれています。期限が切れている行の色を変えたい。これを達成するために私はバリューコンバータを使用しています。 は、ここに私のXAMLです:Xceed datagrid - 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> 

そして、ここでは私のコンバータクラスです:

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(); 
    } 
} 

私は、コンバータにブレークポイントを入れて、コードが実行されますが、行の色変更されていません。色を固定色に設定すると(コメント行のように)うまくいきます。私は何が間違っているのか分かりません。どんな助けでも大歓迎です。

答えて

0

代わりにDataTriggerで試してみてください:

<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> 

およびコンバータ:

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(); 
    } 
} 
関連する問題