我有一个用“foreach”填充的列表,然后我想用按钮删除所选项目......我这样做:
private void btn1_Copy1_Click(object sender, RoutedEventArgs e)
{
if (this.MyList.SelectedIndex >= 0)
{
this.MyList.Items.RemoveAt(this.MyList.SelectedIndex);
}
}
但是,当我按下另一个按钮将一个项目添加到列表时,它会显示我删除的上一个项目。
private void btn1_Click(object sender, RoutedEventArgs e)
{
ComboBoxItem curItem = (ComboBoxItem)Games.SelectedItem;
string SelectedValue = curItem.Content.ToString();
GamesAdd myOrder = new GamesAdd(SelectedValue, Convert.ToInt16(price.Text), Convert.ToInt16(quant.Text),
(Convert.ToInt16(price.Text)*Convert.ToInt16(quant.Text)));
GamesAdd.myList.Add(myOrder);
MyList.Items.Clear();
int i=0;
foreach (var item in GamesAdd.myList)
{
i++;
MyList.Items.Add(i + ". " + item.GameName + " " + item.GameQuant + " x " + item.GamePrice +" " + item.TotalPrice);
}
} //This is the add button code
答案 0 :(得分:2)
您已从组合的项目列表中删除该项目,而不是从GameAdd类的myList中删除。当你重新填充你的组合列表时,你读了GameAdd静态myList中仍然存在的上一个项目
因此,假设您的列表中的GameName字段是唯一的,您可以尝试
private void btn1_Copy1_Click(object sender, RoutedEventArgs e)
{
if (this.MyList.SelectedIndex >= 0)
{
string itemName = this.MyList.Items[this.MyList.SelectedIndex].ToString();
string[] gameParts = itemName.Split(' ');
GamesAdd g = GamesAdd.myList.FirstOrDefault(x => x.GameName == gameParts[1]);
GamesAdd.myList.Remove(g);
this.MyList.Items.RemoveAt(this.MyList.SelectedIndex);
}
}
为此,您需要在添加到组合框列表项的GamesAdd
对象的属性中没有空格。如果不是这种情况,那么在将它们添加到组合框中时,在字符串之间添加某种分隔符。例如,一个点,然后使用该点进行拆分。
更好的方法是使用组合框的DisplayMember
,ValueMember
和DataSource
属性,这样您就可以使用属性作为键来识别GamesAdd对象而不使用繁琐的工具分割