列表与列表框同步?

我在WinForms上有一个列表框,用户可以在其中上下移动项目,并且该列表框与我拥有的列表相同,我想知道什么是保持两者同步的最有效方法.

例如向下移动一个项目,我有:

int i = this.recoveryList.SelectedIndex;
object o = this.recoveryList.SelectedItem;

if (i < recoveryList.Items.Count - 1)
{
  this.recoveryList.Items.RemoveAt(i);
  this.recoveryList.Items.Insert(i + 1, o);
  this.recoveryList.SelectedIndex = i + 1;
}

我有:

public List<RouteList> Recovery = new List<RouteList>();

我想针对列表框进行更新.

我应该简单地清除“恢复”并使用当前列表框数据进行更新,还是在上下移动时有更好的方式进行更新?

我主要是问,因为从列表框到列表的类型不同.

解决方法:

.Net为此类行为提供内置支持.为了使用它,您需要将恢复列表的类型更改为:

public BindingList<RouteList> Recovery = new BindingList<RouteList>();

然后在控件中使用那个BindingList作为数据源:

listBox1.DataSource = Recovery;

这是一个使用String的BindingList的简单示例.我在窗体上有两个listBox,当所选元素与列表中的第一个元素交换时,它们都保持同步:

public partial class Form1 : Form
{
    private readonly BindingList<string> list = new BindingList<string> { "apple", "pear", "grape", "taco", "screwdriver" };

    public Form1()
    {
        InitializeComponent();
        listBox1.DataSource = list;
        listBox2.DataSource = list;
    }

    private void listBox1_KeyUp(object sender, KeyEventArgs e)
    {
        var tmp = list[0];
        list[0] = list[listBox1.SelectedIndex];
        list[listBox1.SelectedIndex] = tmp;
    }
}
上一篇:如何在Android上与SyncAdapter同步?


下一篇:计算机之间的Linux文件同步