我有一个主窗口,其中包含多个UserControls,排列为标签页和标签组(很像Visual Studio允许同时显示两个或多个编辑器)。Winforms数据绑定和多个表格
我也有可能打开这样一个UserControl到一个单独的浮动窗口。
其中一个UserControls包含简单的表单域(例如文本框)。这些文本框与通用数据绑定到一个对象/属性。绑定模式是OnValidation(而不是OnPropertyChanged)。
当我将焦点从主窗口内的此用户控件切换到主窗口中的另一个用户控件时,将自动执行验证并完成数据绑定/将在模型对象/属性上设置更改的文本限于该文本字段。
但是,如果我将焦点切换到驻留在另一个(浮动)窗口中的UserControl,数据绑定未完成,因为未执行验证。
我知道我可以通过触发ValidateChildren等来手动处理,但这看起来是我错了/很丑。
有没有一个“正确的”/干净的方式来解决这个问题?我希望在UserControl失去焦点或窗口被取消激活后立即执行验证。
一个信息:对我的UserControls包含一个TreeControl。如果我编辑树节点标签,并且当我将焦点切换到另一个窗口时,标签编辑会自动完成。我想通常的表单字段相关的绑定行为...
感谢您的帮助!
感谢您的回复。对我来说,问题仍然是:这是树控制,网格控件等如何识别窗体焦点切换的方式,它们是否为父窗体Deactivated事件提供处理程序,并且它们是否跟踪ParentChanged事件上UserControl的更改。因为,就像我的用例一样,同一个UserControl对象可以在不同的表单之间移动。对我而言,解决这样一个简单问题的整个必要逻辑似乎很复杂...... –