Winforms 数据绑定和多个表单

Winforms Databinding and multiple Forms

我有一个包含多个用户控件的主 window,排列为选项卡页和选项卡组(很像 Visual Studio 允许同时显示两个或多个编辑器)。

我也有可能将这样的 UserControl 打开为单独的浮动 window。

其中一个 UserControl 包含简单的表单字段(例如文本框)。这些文本框与对象/属性 的公共数据绑定绑定。绑定模式是 OnValidation(不是 OnPropertyChanged)。

当我将焦点从主 window 中的这个用户控件切换到主 windows 中的另一个用户控件时,自动执行验证并完成数据绑定/更改的文本将在绑定到该文本字段的模型对象 / 属性 上设置。

但是,如果我将焦点切换到位于另一个(浮动)window 中的 UserControl,则数据绑定未完成,因为未执行任何验证。

我知道我可以通过触发 ValidateChildren 等手动处理此问题,但在我看来这似乎是错误的方式/很丑陋。

有没有 "correct" / 干净的方法来解决这个问题?我希望在 UserControl 失去焦点或 window 被停用后立即执行验证。

一个信息:我的一个 UserControls 包含一个 TreeControl。如果我编辑树节点标签,并且当我将焦点切换到另一个(浮动)window 时,标签编辑会自动完成。我想要有关绑定的常用表单字段的相应行为...

感谢帮助!

没有自动执行此操作的方法。从控件的角度来看,它仍然具有焦点(如果您单击标题栏或 Alt-tab 回到主 window,您会注意到焦点仍然在同一个控件中)。只是控件所在的窗体没有激活。如果您希望它在您的表单停用时保存更改,您必须手动触发它。最好的方法可能是重写表单的 OnDeactivate 方法。

    protected override void OnDeactivate(EventArgs e)
    {
        base.OnDeactivate(e);

        this.ValidateChildren();
    }