Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinForms关于数据绑定和修改UI控件的设计问题_C#_.net_Winforms_Data Binding_Controls - Fatal编程技术网

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

C# WinForms关于数据绑定和修改UI控件的设计问题,c#,.net,winforms,data-binding,controls,C#,.net,Winforms,Data Binding,Controls,我有一个WinForms应用程序,它包含一个combobox(comboBoxMain)和几个其他控件。comboBoxMain绑定到5个对象(包含多个属性的数据类实例)的数组,用于选择5个对象中的哪些对象的属性将显示在其他UI控件中。一旦用户在我的表单上的所有控件中选择了所需的值,我就会有一个按钮将这些值复制到数据类的其他4个实例中的每一个。表单上的一些控件可能会影响其他控件的可见性、启用/禁用状态或选定值。例如,如果用户要从其中一个组合框(我们称之为comboBoxStatus)中选择一个值

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

  • 用户在comboBoxStatus中选择一个“Disabled”值(然后在SelectionChangeCommitted()事件处理程序中触发代码,该事件处理程序修改其他控件,如上所述)

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

  • 最后,用户从comboBoxMain中选择其他4个数据对象之一

  • 发生这种情况时,我有一个用于comboBoxMain的SelectionChangeCommitted()事件处理程序,它会激发并查看ComboxStatus中的SelectedValue。不幸的是,它看到的是backing属性的默认值,而不是先前复制到属性的“Disabled”值。我在comboBoxMain_SelectionChangeCommitted()的末尾有代码,它应该检查那些可能影响UI中其他内容的控件的值,并确保所有内容都得到适当更新。但这显然不会发生,因为它没有看到正确的值。如果我将代码移出事件处理程序,并在UI绑定了当前所选数据对象的数据后通过按下按钮手动调用它,那么它就可以工作了。我只能猜测发生这种情况是因为在comboBoxMain\u SelectionChangeCommitted()退出后绑定才会更新


    我希望这一切都有意义。我已经玩了好几个小时了,还没有完全了解到底发生了什么,或者这个问题的最佳解决方案是什么。如果你有什么想法,我很乐意听你说。谢谢你的阅读

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

    我发现从散文文本中收集所有相关的位和片段非常困难。您是否可以在问题中添加相关代码,并指出问题发生的确切位置?