Я создаю числовой TextBox в WPF с двумя кнопками, чтобы увеличить и уменьшить значение.
Я имею, создают два RoutedCommand для управления behiavor, и они работают хорошо. Существует только одна проблема, которую я хотел бы решить. Я хотел бы это, управление уведомляет весь объект, связанный с его TextProperty, когда команда увеличения или уменьшения выполняется.
В данный момент это отправляет уведомление только, когда я изменяю фокус на другое управление
Любая справка действительно ценится, Спасибо
Используйте 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 к 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));
}