Как настроить индивидуальный стиль ошибок WPF DataGrid для работы с ошибками преобразователя значений? - PullRequest
0 голосов
/ 07 апреля 2020

Контекст

Приложение WPF MVVM, в котором мне нужно разрешить отображение и редактирование дат даты и времени из модели представления. Некоторые даты являются «независимыми», а некоторые - в DataGrid. Обработка ошибок (проверка диапазона и т. Д. c) осуществляется через INotifyDataErrorInfo и службу проверки. Я пишу даты с ошибками, как это, чтобы выделить их и предоставить всплывающую подсказку с сообщением об ошибке:

<Style x:Key="ErrorStyle" TargetType="{x:Type Control}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}">
                        <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}" DisplayMemberPath="ErrorContent" />
                    </ToolTip>
                </Setter.Value>
            </Setter>
            <Setter Property="Background" Value="Salmon"/>
            <Setter Property="Height" Value="20"/>
        </Trigger>                
    </Style.Triggers>
</Style>

Issue

Применение к «свободному положению» даты все работает нормально, например

<TextBox x:Name="dueDate"
         Style="{StaticResource ErrorStyle}"
         Text="{Binding Path=DueDate,
                        StringFormat=d, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture},
                        ValidatesOnNotifyDataErrors=True}">
</TextBox>

Это работает и , когда происходит ошибка преобразователя значений (например, неверный формат даты) или ошибка, обнаруженная службой проверки .

Однако для дат в DataGrid все иначе:

<DataGridTemplateColumn Header="Delivery date" SortMemberPath="DeliveryDate">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=DeliveryDate, StringFormat=d, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}"
                     Style="{StaticResource ErrorStyle}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Text="{Binding DeliveryDate, Mode=TwoWay, UpdateSourceTrigger=LostFocus,
                            StringFormat=d,
                            ConverterCulture={x:Static gl:CultureInfo.CurrentCulture},
                            ValidatesOnNotifyDataErrors=True}"/>                                               
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

Здесь мой стиль применяется для ошибок, обнаруженных службой проверки. Но, для ошибок преобразователя значений, я получаю красную окантовку, подсказки нет и все остальные поля отключены. Я полагаю, что по умолчанию такие ошибки встречаются по умолчанию.

Вопрос

Как я могу получить, чтобы моя ошибка форматирования даты в DataGrid работала так же, как и для моих свободных дат?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...