Как заставить событие TextChanged в текстовом поле WPF и сохранить фокус?
Я создаю числовое текстовое поле в WPF, С двумя кнопками для увеличения и уменьшения значения.
У меня создать два RoutedCommand для управления behiavor, и они работают хорошо. Есть только одна проблема, которую я хотел бы решить. Я хотел бы, чтобы элемент управления уведомлял весь объект, привязанный к его TextProperty при выполнении команды увеличения или уменьшения.
на данный момент он отправляет уведомление только когда я меняю фокус на другой элемент управления
любая помощь будет действительно оценили, Спасибо
3 ответов
использовать UpdateSourceTrigger="Explicit"
в переплете и в TextChanged
событие обновления BindingSource
.
так что вы пишете что-то вроде этого:
<NumericTextBox x:Name="control" Text={Binding Path=MyProperty}/>
вместо этого сделайте так
<NumericTextBox x:Name="control" Text={Binding Path=MyProperty, UpdateSourceTrigger=Explicit}/>
и TextChanged
обработчик событий обновляет привязку.
control.GetBindingExpression(NumericTextBox.TextProperty).UpdateSource();
и это сделали. Надеюсь, это поможет!!
есть простой способ:
Text="{Binding Path=MyProperty, UpdateSourceTrigger=PropertyChanged}"
(Я тестировал его на TextBox). Удачи!--2-->
поведение по умолчанию для привязки свойства text на TextBox
обновить о LostFocus
. Вы можете изменить это в своем пользовательском элементе управления, переопределив метаданные в TextProperty
в вашем статическом ctor:
static NumericTextBox()
{
TextProperty.OverrideMetadata(
typeof(NumericTextBox),
new FrameworkPropertyMetadata("", // default value
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
null, // property change callback
null, // coercion callback
true, // prohibits animation
UpdateSourceTrigger.PropertyChanged));
}