在两个控件之间共享绑定源不起作用

Posted

技术标签:

【中文标题】在两个控件之间共享绑定源不起作用【英文标题】:Sharing a Binding Source Between Two Controls Not Working 【发布时间】:2012-05-22 08:58:46 【问题描述】:

我正在创建一个将充当主从编辑器的表单。我在这个表单上有 2 个控件。一个基本上是主项目列表,另一个控件是项目的详细信息。我试图在两个控件中使用相同的 BindingSource 对象,以便在主控件上进行更改时,将更新详细控件。

在我的表格中,我有:

EmployerCollection employerCollection = new EmployerCollection();
employerCollection.GetMulti(null, 0, new SortExpression(EmployerFields.Name | SortOperator.Ascending));
bsEmployers.DataSource = employerCollection;

masterControl.Init(bsEmployers);
detailControl.Init(bsEmpoyers);

在我的 masterControl 我有:

public void Init(BindingSource bs)

    bsEmployers = bs;

但是,当我以这种方式传递绑定源时,我无法让我的主控件显示绑定源中的数据。

只有删除 bsEmployers = bs 行并按如下方式移动其他逻辑才能使绑定工作:

public void Init(BindingSource bs)
    
        EmployerCollection employerCollection = new EmployerCollection();
        employerCollection.GetMulti(null, 0, new SortExpression(EmployerFields.Name |             SortOperator.Ascending));
        bsEmployers.DataSource = employerCollection;
    

有谁知道我不能传递 BindingSource 对象来共享它吗?我尝试在我的控件中调用 RefreshBindings,但它似乎没有任何效果。

谢谢。

【问题讨论】:

当你分配 bsEmployers = bs;您覆盖了绑定源的引用,但您的所有控件仍绑定到旧的 bsEmployers。尝试从表单设计器中删除您的绑定源并以编程方式创建它并将其分配给正在使用它的所有子控件。您也可以尝试调用 bsEmployers.DataSource = bs.DataSource; 【参考方案1】:

我不认为 BindingSource 打算以这种方式使用。我建议将 EmployerCollection 值传递给 Init 方法,并让每个控件使用 EmployerCollection 创建自己的 BindingSource。

【讨论】:

以上是关于在两个控件之间共享绑定源不起作用的主要内容,如果未能解决你的问题,请参考以下文章

两个实体之间的共享主键不起作用

Resharper 8:导航到反编译源不起作用

在目标之间共享 UserDefault 不起作用

使用属性更改简单绑定到用户控件在 vs 扩展工具窗口中不起作用

在父项中设置绑定时,Xamarin.Forms 绑定到自定义控件不起作用

命令绑定在带有棱镜的 WPF 中不起作用