假设我们在winforms应用程序中有一个Combobox
,其项目绑定到Bindingsource
。
当用户更改combobox
中的选定项目时,我需要触发一个事件。
我应该处理combobox.selectedindexchanged
事件还是bindingsource.currentchanged
事件。在性能或其他方面哪个更好?
我搜索了很多以找到一篇文章或关于它的东西,但找不到直接和清晰的东西。我感谢任何建议或解决方法。
更新
我需要在用户从combobox
中选择项目后ID
调用基于所选对象的函数。(ID
可从Combobox1.SelectedValue
和bindingSource1.Current.ID
访问(。 在这种情况下,我应该选择哪个事件?
最终用户选择UI中的任何项目时处理事件,则应使用combobox.selectedindexchanged
,因为bindingsource.currentchanged
可能由于MSDN博客BindingSource.CurrentChanged Event上提到的数字原因而触发,因此,如果您出于MSDN中提到的任何原因需要处理事件,那么它将不必要地通过您可能已为选择更改事件编码的逻辑。在处理事件时,您的代码应该是特定的。
如果 ComboBox 绑定到 BindingSource,你通常会把它留在那里。如果确实需要利用事件,最好在业务对象中创建更多属性。例如,假设您要禁用一个按钮,如果组合框是索引值 == 0,只需在业务对象中创建一个属性,按钮的 Enabled 属性绑定到该属性,例如:
public virtual bool IsFunctionEnabled
{
get { return (An_Items_SelectedIndex > 0); }
}
如果您确实需要在 ComboBox 的选定索引更改事件中执行操作,我倾向于在表示层中执行此操作,因为我不建议使用绑定源代码管理或其事件。
最好的解决方案是处理业务对象中的所有内容,并通过 BindingSources 绑定控件。在表示层中执行任何逻辑都很难进行测试,并且更改绑定源中的任何内容都会增加大量测试。
毕竟,我开始知道使用Combobox.SelectedIndexChanded
事件应该更好,因为我正在与用户交互并寻找来自 UI 的响应。虽然这里的事件对我做同样的事情,但Bindingsource.CurrentChanged
事件可用于我想从任何地方跟踪当前对象更改,例如列表更改或其他内容,而不是完全是 UI。我相信最好在这里使用combobox
事件。