如何在WPF TextBox上强制TextChanged事件并保持焦点?

时间:2010-03-30 14:13:22

标签: c# .net wpf custom-controls

我正在 WPF 中创建一个数字TextBox,其中有两个按钮可以增加和减少该值。

我创建了两个 RoutedCommand 来管理behia,他们运作良好。我只想解决一个问题。我希望控件在执行增加或减少命令时通知绑定到 TextProperty 的所有对象。

目前只有在我将焦点更改为其他控件时才会发送通知

非常感谢任何帮助, 谢谢

3 个答案:

答案 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));
}