我在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;
}
}