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