Как заставить событие 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));
}