我正在使用 WPF 创建一个数字文本框,并带有两个按钮,用于增加和减少值。
我创建了两个 RoutedCommand 来管理行为,并且它们工作正常。但是只有一个问题我想解决。当执行增加或减少命令时,我希望控件通知其绑定到 TextProperty 的所有对象。
目前它仅在我将焦点更改为另一个控件时发送通知。
非常感谢您的帮助, 谢谢
我正在使用 WPF 创建一个数字文本框,并带有两个按钮,用于增加和减少值。
我创建了两个 RoutedCommand 来管理行为,并且它们工作正常。但是只有一个问题我想解决。当执行增加或减少命令时,我希望控件通知其绑定到 TextProperty 的所有对象。
目前它仅在我将焦点更改为另一个控件时发送通知。
非常感谢您的帮助, 谢谢
有一种简单的方法:
Text="{Binding Path=MyProperty, UpdateSourceTrigger=PropertyChanged}"
(我在TextBox上测试过了。祝好运。)
在绑定中使用 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 YourBindableProperty, UpdateSourceTrigger=PropertyChanged}"
? - Jonathan PerryTextBox
的 Text 属性的默认绑定行为是在 LostFocus
时更新。您可以通过在静态构造函数中覆盖 TextProperty
上的元数据来更改此行为:
static NumericTextBox()
{
TextProperty.OverrideMetadata(
typeof(NumericTextBox),
new FrameworkPropertyMetadata("", // default value
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
null, // property change callback
null, // coercion callback
true, // prohibits animation
UpdateSourceTrigger.PropertyChanged));
}
Text="{Binding MyTextProperty, UpdateSourceTrigger=PropertyChanged}"
似乎是最好的选择。 - DK.