C# 如果用户单击了';它不可聚焦?

C# 如果用户单击了';它不可聚焦?,c#,wpf,binding,focusable,C#,Wpf,Binding,Focusable,我有一个ItemsControl,里面有几十个项目;每个项目都是一个绑定文本框和两个按钮。因为我希望用户能够从一个文本框切换到另一个文本框,所以按钮的焦点设置为False。这个很好用。唯一的问题是,由于文本框没有失去焦点,它们的绑定没有更新源代码,因此按钮后面的代码没有使用正确的值 我可以想出一种方法来解决这个问题,例如,让按钮的点击处理程序在逻辑树中导航到相关的文本框,并使绑定显式更新源代码。但在我看来,必须有比这更好的方法,如果我对焦点模型有更好的理解,这对我来说可能是显而易见的。有吗?如果

我有一个ItemsControl,里面有几十个项目;每个项目都是一个绑定文本框和两个按钮。因为我希望用户能够从一个文本框切换到另一个文本框,所以按钮的焦点设置为False。这个很好用。唯一的问题是,由于文本框没有失去焦点,它们的绑定没有更新源代码,因此按钮后面的代码没有使用正确的值


我可以想出一种方法来解决这个问题,例如,让按钮的点击处理程序在逻辑树中导航到相关的文本框,并使绑定显式更新源代码。但在我看来,必须有比这更好的方法,如果我对焦点模型有更好的理解,这对我来说可能是显而易见的。有吗?

如果性能允许,您可以将这些文本框元素的
UpdateSourceTrigger
更改为
PropertyChanged
,而不是
LostFocus

,因为性能是一个问题,您可能会发现一个有用的方法。上下文与您的问题非常相似。Josh通过手动触发绑定更新来解决此问题:

    TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
    if (focusedTextBox == null)
        return;

    BindingExpression textBindingExpr = 
      focusedTextBox.GetBindingExpression(TextBox.TextProperty);
    if (textBindingExpr == null)
        return;

    textBindingExpr.UpdateSource();

可能行不通:它是RichTextBox的一个子类,支持文档属性的属性更改通知,以便ValueConverter可以解析XAML并将其转换为HTML。我不太可能在每次击键时都这样做。如果您担心此操作的成本,请通过触发计时器的内容路由属性,并且只有在计时器计算后(10ms?100ms?)才真正执行转换。