我要同时从列表框中删除2个项目,第一个项目是信息项目,而secong项目只是在它们之间创建空间。
这是包含以下项目的列表框:
我想在其后删除世界项目和空白项目。
我已尝试过此代码:
listbox1.Items.Remove(listbox1.SelectedItem);
listbox1.Items.RemoveAt(listbox1.SelectedIndex + 1);
问题是它从列表框中删除了所有项目或删除了不同的项目。
将项目添加到列表框我使用Insert
listbox1.Items.Insert(0, "");
listbox1.Items.Insert(0, "!");
listbox1.Items.Insert(0, "");
listbox1.Items.Insert(0, "World");
listbox1.Items.Insert(0, "");
listbox1.Items.Insert(0, "Hello");
答案 0 :(得分:2)
当您致电listbox1.Items.Remove(listbox1.SelectedItem);
时,您将删除当前所选的项目。这意味着listbox1.SelectedItem
和listbox1.SelectedIndex
不再指向他们之前所做的事情。
撤销通话顺序是避免这种情况的一种方法。
listbox1.Items.RemoveAt(listbox1.SelectedIndex + 1);
listbox1.Items.Remove(listbox1.SelectedItem);
答案 1 :(得分:1)
这样做
listbox1.Items.RemoveAt(listbox1.SelectedIndex + 1);//deletes the item below World
listbox1.Items.Remove(listbox1.SelectedItem);//deletes World
答案 2 :(得分:0)
如果将集合绑定到ObservableCollection,则不必处理这些问题。
视图模型:
private ObservableCollection<String> items;
private String selectedItem;
public ObservableCollection<String> Items
{
get { return items; }
set {
if( items==value )// simplified
return;
items = value;
RaisePropertyChanged("Items");
}
}
public String SelectedItem {...}
查看:
<...
<ListBox ItemsSource={Binding Items, Mode=TwoWay} SelectedItem={Binding SelectedItem, Mode=TwoWay}>
<ListBox.TemplateStuffGoesHere/>
.../>
在实现INotifyPropertyChanged接口的viewmodel中执行此操作,或者forinstance使用galasofts mvvmlight viewmodelbase类作为基类。当您只是从列表中删除项目时,删除项目现在应该自动工作。直接使用令人讨厌的代码隐藏的控件直接混乱是一个很大的禁忌=)
答案 3 :(得分:0)
根据您尝试的代码,
listbox1.Items.Remove(listbox1.SelectedItem);
listbox1.Items.RemoveAt(listbox1.SelectedIndex + 1);
之后
listbox1.Items.Remove(listbox1.SelectedItem);
删除所选项目,所选项目背后的项目减少其指数 1 (向前移动)。除此之外,listbox1.SelectedIndex
之后也变为 -1 。那一刻,
listbox1.SelectedIndex + 1 = -1 + 1 = 0
因此,你正在做
listbox1.Items.RemoveAt(0);
这就是为什么你觉得很奇怪,因为你删除了你选择的项目和新列表框列表的第一项(所选项目后面的那些项目向前移动)。
在您的情况下,删除“世界”,然后删除“Hello”。
我建议你存储SelectedIndex的值并重用它。
int i = listbox1.SelectedIndex;
listbox1.Items.RemoveAt(i);
listbox1.Items.RemoveAt(i);
要删除包含所选项目的 n 连续行
int i = listbox1.SelectedIndex;
for (int j = 0; j < n;j++ )
listbox1.Items.RemoveAt(i);
全部因为删除项目后所有项目索引都会更新。