【问题标题】:Issue with WPF TwoWay databinding on TextBox hosted in WinForms MDIWinForms MDI 中托管的 TextBox 上的 WPF TwoWay 数据绑定问题
【发布时间】:2012-08-19 05:18:48
【问题描述】:

我最近刚刚发现了一个问题的根源,该问题出现在我一直在处理的一个应用程序中,该应用程序使用传统的 WinForms MDI 和在 ElementHosts 中为每个表单托管的 WPF UserControls。问题是,如果用户更改了 TextBox 中的文本,该文本框是 TwoWay 绑定到 ViewModel 属性的,那么在单击工具栏中的“保存”按钮时,该属性上的设置器未设置。此行为的结果是没有保存最后设置的文本设置。

我正在使用 LostFocus 的默认 UpdateSourceTrigger 值,所以我相信当我单击工具栏中的基于 WinForms 的保存按钮时,WPF 文本框元素没有失去焦点。所以现在我理解了这个问题,我很好奇解决这个问题的正确或最佳方法是什么。

我能想到的两个主要选项要么需要手动提示更新设置器而不会导致控件失去焦点,要么只是让 TextBox 失去焦点以便进行正常的源更新。

【问题讨论】:

  • 您可能会陷入休假或失去对 UserControl 的关注。
  • 我会考虑这样做,但我相信这些事件也不会触发,因为就 WPF UI 基础架构而言,我仍然专注于 TextBox。
  • 我已经涉足 WPF 中严重损坏的焦点范围实现,我不期待研究它,因为它可能是一个失败的原因,但我想知道是否有什么我可以触发当这些按钮被点击时,我可以以一种合理的方式手动转移焦点?

标签: wpf winforms data-binding focus mdi


【解决方案1】:

您可以将 UpdateSourceTrigger 更改为 PropertyChanged,然后“保存”按钮将很好地工作。

我认为你的推理是正确的。 WPF 和 Winforms 都有单独的“Focusmanagers”,所以如果你从 WPF TextBox 转到 winforms 按钮,那么焦点无处可去。

【讨论】:

  • 我确实想到了这个选项,尽管它会在数据绑定中导致更多的闲聊,并且需要我们在系统中的所有 TextBox 上设置它,我认为此时这是不可接受的因为它是一个非常大的系统。
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 2011-10-18
相关资源
最近更新 更多