Различные UpdateSourceTriggers для способов привязки

Я не знаю, как мне реализовать одно специальное поведение. У меня есть представление с сеткой данных, которая включает в себя две колонки. В одном столбце отображается форматированная цена ("00,00"). Цена будет автоматически сохранена, когда привязка будет обновлена ​​(свойство установлено). Если я использую UpdateSourceTrigger=PropertyChanged, цена всегда будет правильной. Недостаток этого триггера заключается в том, что если пользователь выделит весь текст в текстовом поле и введет просто "1", цена будет отформатирована до "01.00". Я не хочу, чтобы цена автоматически формировалась. Это форматирование должно появляться только тогда, когда фокус перемещается на другой объект.

Теоретически мне нужно установить два разных UpdateSourceTrigger. Один для обновления бэкэнда (пользователь вводит что-то в текстовое поле). И один для обновления цели (фокус переместился на другой объект). Кроме того, мне нужно немедленно отобразить, если новое значение является недействительным.

<DataGrid>
    <DataGrid.Columns>
        <!-- one other column -->
        <DataGridTemplateColumn Header="Price"/>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!-- this textbox should update the source if user types something -->
                    <!-- the textbox itself should be updated after lost focus -->
                    <TextBox Text="{Binding Price, UpdateSourceTriger=PropertyChanged}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn/>
    </DataGrid.Column>
</DataGrid>

РЕДАКТИРОВАТЬ: Я приведу небольшой пример: если я установлю привязанное свойство Price в "1", оно автоматически будет преобразовано в "01.00". С UpdateSourceTrigger = PropertyChanged TextBox отображает "01.00". Я хочу, чтобы TextBox отображал "1", пока TextBox сфокусирован. Конечно, я получу такое поведение с UpdateSourceTrigger=LostFocus. Проблема здесь в том, что DataGrid содержится в TabControll, и оба элемента управления не очень хорошо работают вместе. Если вы выберете другую вкладку, когда фокус все еще находится на TextBox, TextBox не выбросит LostFocus.

Надеюсь, у некоторых из вас есть для меня совет:-)

Андре

1 ответ

Вы всегда можете использовать UpdateSourceTrigger=LostFocus чтобы запустить форматирование ваших чисел, когда пользователь удаляет фокус из TextBox. Для проверки я бы порекомендовал использовать проверку в формате презентации Windows, который встроен в элементы управления пользователя.

Изменить: добавить событие OnSelect к TabItem установить Фокус (удаляет фокус из TextBlock), но IsInabled и IsFocusable должны быть включены в TabItem.

Другие вопросы по тегам