Приветствую!
У меня на форме есть текст бокс :
<TextBox TextWrapping="Wrap" Grid.Column="2" Grid.Row="2"
Text="{Binding TextToSend}"/>
и кнопка
<Button Content="SEND" Command="{Binding InsertMessage}"/>
Внутри вьюмодели есть свойство к которому текст привязан :
private string _texttosend { get; set; }
public string TextToSend
{
get
{
return _texttosend;
}
set
{
_texttosend = value;
NotifyPropertyChanged("TextToSend");
}
}
Команда InsertMessage содержит проверку связанного свойства :
if (!string.IsNullOrWhiteSpace(_texttosend))
И если я нажимаю ПКМ мыши по Button то все работает как надо и текст из бокса попадает в связанное свойство. Однако, если я добавлю кнопке IsDefault="True" то произойдет ошибка - а именно _texttosend == null. Не могу понять почему так. Разница только в том, что первый раз я нажимаю на кнопку мышью а во втором случае вызываю команду через ENTER. В чем может быть причина ?
Дело в том, что по умолчанию обновление источника привязки происходит по событию LostFocus, а при нажатии клавиши Enter фокус не покидает TextBox, поэтому источник привязки не обновляется.
Чтобы добиться нужного эффекта можно включить обновление источника привязки по событию TextChanged, для этого установите свойство UpdateSourceTrigger в значение PropertyChanged:
Text="{Binding TextToSend, UpdateSourceTrigger=PropertyChanged}"
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости