Winforms 为什么小部件分配到同一数据源时会同时更新?

Winforms 为什么小部件分配到同一数据源时会同时更新?,winforms,Winforms,我有一个关于Windows窗体数据源的非常基本的问题 如果我将相同的对象数据源分配给同一表单上的combobox和listbox,我会观察到有趣的UI行为:当我更改combobox(或listbox)中的项时,另一个控件会选择相同的项 我没有这个UI行为的额外代码,所以我想知道它是如何工作的 var persons = new List<Person> {

我有一个关于Windows窗体数据源的非常基本的问题

如果我将相同的对象数据源分配给同一表单上的combobox和listbox,我会观察到有趣的UI行为:当我更改combobox(或listbox)中的项时,另一个控件会选择相同的项

我没有这个UI行为的额外代码,所以我想知道它是如何工作的

 var persons = new List<Person>
                              {
                                  new Person {Id = 1, Age = 10, Name = "Alex"},
                                  new Person {Id = 2, Age = 12, Name = "Boris"},                                 
                              };

   //     ListBox 
   lbPersons.DisplayMember = "Name";           
   lbPersons.DataSource = persons;

    //    ComboBox
    cbPersons.DisplayMember = "Name";
    cbPersons.DataSource = persons; 
var persons=新列表
{
新人{Id=1,年龄=10,Name=“Alex”},
新人{Id=2,年龄=12,Name=“Boris”},
};
//列表框
lbPersons.DisplayMember=“Name”;
lbPersons.DataSource=个人;
//组合框
cbPersons.DisplayMember=“Name”;
cbPersons.DataSource=个人;

请解释一下控件的选定项是如何同步更改的?

我在web上发现了一些类似的问题。我不完全明白这是怎么回事,但我会尽我所能:

将多个控件绑定到同一数据源时,它们使用相同的bindingcontext。因此,切换一个控件上的选定项将更改另一个控件上的选定项

而是在绑定数据源时,为每个数据源提供一个新的BindingContext:

lbPersons.DisplayMember = "Name";           
lbPersons.DataSource = persons;
lbPersons.BindingContext = new BindingContext();

cbPersons.DisplayMember = "Name";
cbPersons.DataSource = persons; 
cbPersons.BindingContext = new BindingContext();
我在一个论坛(下面的链接)中找到了这些信息,他们在那里确认了这个问题并提出了解决方案。我需要对此进行更多阅读,但更多信息可在msdn中找到,网址为:

http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingcontext.aspx

编辑依据:

控件的BindingContext对象用于返回单个 包含的所有数据绑定控件的BindingManagerBase对象 控制BindingManagerBase对象保留所有可用的控件 已同步绑定到同一数据源。例如,设置 BindingManagerBase的Position属性指定 所有数据绑定控件指向的基础列表

此外:

(http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingcontext.bindingcontext(v=vs.71).aspx

例如,如果您有两个BindingManagerBase对象(来自两个 不同的BindingContext对象),可以设置位置属性 将每个BindingManagerBase的 数据绑定控件将显示来自同一数据的不同值 来源


看起来(但我不确定)在幕后有一个“管理者”,负责控制为所有控件分配的数据源值“管理器”跟踪所有selectedItems更改事件和已分配相同数据源值的控件的selectedItems更改。谁知道它是干什么用的,以及如何在整个应用程序中禁用它。@AndrewFlorko查看我的编辑。上面的代码不能解决问题吗?