Обычно вы не хотите, чтобы UpdateSourceTrigger
было PropertyChanged
для привязки TextBox.Text
, потому что это вызывает уведомление о проверке и изменении при каждом нажатии клавиши.
Если вы делаете это толькотак что, если пользователь нажмет Enter, он сохранит значение перед обработкой команды сохранения, а затем я бы предложил подключить событие PreviewKeyDown
и обновить источник вручную, если нажата клавиша Enter (обычно я делаю это AttachedProperty)
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var obj = sender as UIElement;
BindingExpression textBinding = BindingOperations.GetBindingExpression(
obj, TextBox.TextProperty);
if (textBinding != null)
textBinding.UpdateSource();
}
}
Но с учетом вышесказанного, если вы все еще хотите использовать UpdateSourceTrigger=PropertyChanged
, рассмотрите возможность использования форматирования при отображении значения, но удалите его, пока пользователь его редактирует.
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding Path=MyDoubleValue, StringFormat=N2}" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Text" Value="{Binding Path=MyDoubleValue, UpdateSourceTrigger=PropertyChanged}" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>