关于数据绑定和修改UI控件的WinForms设计问题

本文关键字:WinForms 问题 控件 UI 数据绑定 修改 | 更新日期: 2023-09-27 18:04:48

我有一个WinForms应用程序,其中包含一个组合框(comboBoxMain)和其他几个控件。comboBoxMain绑定到一个包含5个对象的数组(包含多个属性的数据类的实例),并用于选择,其中的5个对象将在其他UI控件中显示其属性。一旦用户在表单上的所有控件中选择了所需的值,我就有一个按钮,将这些值复制到数据类的其他4个实例中的每一个。表单上的一些控件可以影响其他控件的可见性、启用/禁用状态或选定值。例如,如果用户要从其中一个组合框(我们称其为comboBoxStatus)中选择"Disabled"的值,则会导致其他三个控件被禁用,一个复选框被选中,并且组框的标题被更改。我在使用这个功能时遇到的问题可以用下面的场景来描述:

  1. 用户在comboBoxStatus中选择"Disabled"的值(然后触发其selectionchangecomcommitted()事件处理程序中的代码,该代码修改了我上面描述的其他控件)。

  2. 接下来,用户单击按钮将所有控件中当前选择的值复制到其他4个数据对象中。

  3. 最后,用户从comboBoxMain中选择另外4个数据对象中的一个。

当这种情况发生时,我有一个comboBoxMain的selectionchangecomcommitted()事件处理程序,它会触发并查看comboBoxStatus中的SelectedValue。不幸的是,它看到的是backing属性的默认值,而不是先前复制到该属性的"Disabled"值。我在comboboxmain_selectionchangecomcommitted()的末尾有代码,它应该检查那些可能影响UI中其他东西的控件的值,并确保一切都得到适当的更新。这显然不会发生,因为它没有看到正确的值。如果我将该代码移出事件处理程序,并在UI为当前选择的数据对象绑定数据后通过按下按钮手动调用它,那么它就可以工作了。我只能猜测,这是因为绑定没有更新,直到comboboxmain_selectionchangecomcommitted()已经退出?

我希望这些都说得通。我已经玩了几个小时了,但还没有完全理解发生了什么,或者这个问题的最佳解决方案是什么。如果你有什么想法,我很乐意听听。感谢阅读!

关于数据绑定和修改UI控件的WinForms设计问题

我可以通过将selectionchangecomcommitted事件处理程序中的代码移动到SelectedIndexChanged事件处理程序中来解决这个问题。