繁体   English   中英

C#绑定:如何在BindingList中禁用CurrencyManager,以便不维护当前项位置并且不发信号?

[英]C# Binding: How can I disable the CurrencyManager in BindingList so Current Item position is not maintained and not signaled?

我有两个数据包到同一个BindingList的ListBox。

问题是当从GUI更改所选项时,它正在改变BindingList中的位置,然后BindingList发信号通知另一个ListBox以更改其所选项。

所以我已经同步了两个ListBoxes Selected Item,这对我不利。

我想保持项目列表同步。 没有光标位置。

如何禁用该光标以使其不被维护?

示例代码(只需在设计时向表单添加两个ListBox,并注册SelectedIndexChanged事件并使用按钮注册按钮单击事件):

public partial class Form1 : Form
{
    BindingList<string> list = new BindingList<string>();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        list.Add("bla1");
        list.Add("bla2");
        list.Add("bla3");

        this.listBox1.DataSource = list;
        this.listBox2.DataSource = list;
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex != -1)
            System.Diagnostics.Trace.WriteLine("ListBox1: " + listBox1.SelectedItem.ToString());
    }

    private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBox2.SelectedIndex != -1)
            System.Diagnostics.Trace.WriteLine("ListBox2: " + listBox2.SelectedItem.ToString());
    }

    // Register this event to a button
    private void button1_Click(object sender, EventArgs e)
    {
        list.Add("Test");
    }
}

谢谢, - 兰。

将此行添加到Form_Load

this.listBox1.BindingContext = new BindingContext();

将listBox1和listBox2声明为以下类型似乎会导致所需的行为。

class MyListBox: ListBox {

    protected override void OnSelectedIndexChanged (EventArgs a) {
        if (DataManager != null) {
            DataManager.SuspendBinding();
        }
    }

}

此致,tamberg

我对此问题的解决方案是使用普通的List而不是BindingList,只需在Form对象上调用(更改前):this.BindingContext [Your List] .SuspendBinding(); 并且在更改为List之后.BindingContext [Your List] .ResumeBinding(); 这会更新所有有界控件。

请注意, 这里也会在MSDN链接中注明:

“如果绑定到未实现IBindingList接口的数据源(例如ArrayList),则在更新数据源时不会更新绑定控件的数据。例如,如果有一个绑定到ArrayList的组合框并且数据被添加到ArrayList中,这些新项目将不会出现在组合框中。但是,您可以通过在绑定控件的BindingContext类的实例上调用SuspendBinding和ResumeBinding方法来强制更新组合框。 “。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM