2010-07-13 1 views
0

DataDatarid의 행을 색칠하기 위해 ObjectDataProvider에서 채워지는 datetime 열을 찾고있었습니다. 제 질문은 XAML 내에서 가능합니까? 내가 원했던 것의 샘플 코드를한데 모아서 datetime 비교를 한 다음 해당 행의 색상을 적용합니다.WPF 컨트롤 트리거가 DataGrid의 DATETIME에 적용되었습니다.

<Style.Triggers> 
    <Trigger Property="DateTimeColumn" Value="dateisbeforetoday" > 
     <Setter Property="Background" Value="Yellow" /> 
    </Trigger> 
    <Trigger Property="DateTimeColumn" Value="dateaftertoday" > 
     <Setter Property="Background" Value="Red" /> 
    </Trigger> 
    </Style.Triggers> 

나는 각 행을 통해 내 방식을 반복하고 착색의 생각,하지만 난이 지저분한 것, 그리고 정렬 일을 망칠 수도 있습니다 생각했다.

답변

2

표준 패턴은 비교에 따라 개체를 True 또는 False로 변환하는 IValueConverter을 만드는 것입니다. 코드에서

:

public class IsBeforeTodayConverter 
    : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value is DateTime) 
     { 
      return ((DateTime)value).Date < DateTime.Now.Date; 
     } 
     else 
     { 
      return DependencyProperty.UnsetValue; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return Binding.DoNothing; 
    } 
} 

XAML에서 :

<Style.Resources> 
    <local:IsBeforeTodayConverter x:Key="IsBeforeTodayConverter" /> 
</Style.Resources> 
<Style.Triggers> 
    <DataTrigger 
     Binding="{Binding DateTimeColumn, 
      Converter={StaticResource IsBeforeTodayConverter}}" 
     Value="True"> 
     <Setter Property="Background" Value="Yellow"/> 
    </DataTrigger> 
</Style.Triggers> 

당신은 IsAfterToday에 대한 유사한 컨버터를 만들거나 ConverterParameter을 복용하여 해당 클래스를 일반화 할 수있다.