В окошке XAML есть TextBox с привязкой:
<!-- Rule description -->
<GroupBox Header="Rule description" Grid.Row="7">
<TextBox Text="{Binding Description, Mode=TwoWay}" Margin="0,5"/>
</GroupBox>
В коде мы задаем ViewModel так:
_viewModel = new DetailedRuleViewModel(null, detailedEvent);
DataContext = _viewModel;
Ну а в самой ViewModel это поле описано так:
public string Description
{
get => _copy.Description ?? "";
set
{
_copy.Description = value;
OnPropertyChanged(nameof(Description));
}
}
Естественно сама ViewModel наследуется от INotifyPropertyChanged, так что всё должно обновляться корректно. Однако, при тестировании изменений в этом поле, они не происходили.
Решение
Оказывается, что по умолчанию, уведомления об изменениях поступают только при смене фокуса с элемента. Если же просто выделить TextBox и ввести какие-то данные, то программа об этом не «узнает» пока мы не покинем этот элемент и не перенесём фокус на другой!
Чтобы изменения увидеть, даже если мы редактируем только один элемент, нужно добавить триггер:
UpdateSourceTrigger=PropertyChanged
Нужный нам TextBox теперь будет выглядеть так:
<!-- Rule description -->
<GroupBox Header="Rule description" Grid.Row="7">
<TextBox Text="{Binding Description, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Margin="0,5"/>
</GroupBox>
DenTNT недавно публиковал (посмотреть все)
- WPF: Не обновляется привязка к TextBox - 29.04.2025
- GitHub Desktop: Ошибка при попытке отправки коммита - 28.03.2025
- Visual Studio: Включить XAML Live Preview - 24.03.2025