2010-07-13 78 views
0

我正在尋找顏色的DataGrid的行按照由ObjectDataProvider填充到的日期時間列,我的問題是這是否可能在XAML內?把我想要的一些示例代碼封裝起來,根據其中的一個進行日期時間比較,然後根據適用情況對該行進行着色。WPF控制觸發器應用於DATETIME的datagrid

<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

標準模式是創建一個IValueConverter,根據比較將對象轉換爲True或False。

在代碼:

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概括這個類。