1

データベースにバインドされた障害ログ アプリケーションを作成しています

私が望むものの主な用途は、リストされている DateTime が現在の日付より 3 週間以上前の場合、DateTime セルを RED にフォーマットすることです。

MainWindow.xaml

<DataGrid AutoGenerateColumns="False" Height="379" HorizontalAlignment="Left" Margin="0,36,0,0" Name="dataGridLog" VerticalAlignment="Top" Width="432" SelectionChanged="dataGridLog_SelectionChanged" IsReadOnly="True" MouseDoubleClick="dataGridLog_MouseDoubleClick" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected">

    <DataGrid.Columns>
        <DataGridTemplateColumn x:Name="dateColumn" Header="Date" Width="80" CanUserReorder="True" CanUserSort="False">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock x:Name="dateColumnTextBlock" Text="{Binding Path=DateSent, StringFormat={}{0:dd/MM/yyyy}}" Width="80" />
                    <DataTemplate.Triggers>
                        <!--<DataTrigger Binding="{Binding Path=DateSent, StringFormat={}{0:dd/MM/yyyy}, Converter={x:Reference mIsEqualOrGreaterThanConverter.Instance}, ConverterParameter=3}" Value="True">
                            <Setter TargetName="dateColumnTextBlock" Property="Background" Value="Red" />
                        </DataTrigger>-->
                    </DataTemplate.Triggers>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn x:Name="priorityColumn" Header="Priority" Width="80" CanUserReorder="True" CanUserSort="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock x:Name="priorityColumnTextBlock" Text="{Binding Path=Priority}" Width="80" />
                    <!--<DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding Path=Priority}" Value="Urgent">
                            <Setter TargetName="priorityColumnTextBlock" Property="Background" Value="Red" />
                        </DataTrigger>
                    </DataTemplate.Triggers>-->
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTextColumn x:Name="titleColumn" Binding="{Binding Path=Fault}" Header="Title" Width="270" CanUserReorder="True" CanUserSort="True" />
   </DataGrid.Columns>
</DataGrid>

MainWindow.xaml.cs

[ValueConversion(typeof(DateTime), typeof(String))]
public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        DateTime curDate = DateTime.Now;

        TimeSpan span = curDate.Subtract(date);

        return span.Days;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string strValue = value as string;
        DateTime resultDateTime;
        if (DateTime.TryParse(strValue, out resultDateTime))
        {
            return resultDateTime;
        }
        return DependencyProperty.UnsetValue;
    }
}

コンバーターをバインドできないようで、日付を変換できません。

4

1 に答える 1

4

Converter在留届を出した場合Resources

<Window.Resources>
    <local:IsEqualOrGreaterThanConverter x:Key="IsEqualOrGreaterThanConverter" />
</Window.Resources>

このように参照できます

<DataTrigger Binding="{Binding Path=DateSent, Converter={StaticResource IsEqualOrGreaterThanConverter}, ConverterParameter=3}" Value="True">
    <Setter TargetName="dateColumnTextBlock" Property="Background" Value="Red" />
</DataTrigger>

あなたDataTriggerは真と比較します。したがってConverter、ブール値を返す必要があります。

[ValueConversion(typeof(DateTime), typeof(bool))]
public class IsEqualOrGreaterThanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        DateTime curDate = DateTime.Now;

        TimeSpan span = curDate.Subtract(date);

        return span.TotalDays > (int)parameter * 7;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2012-08-14T12:36:47.580 に答える