我正在 WPF 中创建一个数字TextBox,其中有两个按钮可以增加和减少该值。
我创建了两个 RoutedCommand 来管理behia,他们运作良好。我只想解决一个问题。我希望控件在执行增加或减少命令时通知绑定到 TextProperty 的所有对象。
目前只有在我将焦点更改为其他控件时才会发送通知
非常感谢任何帮助, 谢谢
答案 0 :(得分:29)
有一种简单的方法:
Text="{Binding Path=MyProperty, UpdateSourceTrigger=PropertyChanged}"
(我在TextBox上测试过它)。 祝你好运
答案 1 :(得分:12)
在绑定中使用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();
那就完成了。 希望它有所帮助!!
答案 2 :(得分:2)
TextBox
上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));
}