UWP中如何将ListView选中项添加至全局数组
解决UWP程序中添加选中项后重复显示的问题
嘿,别担心!作为编程新手遇到这种问题太正常了,我帮你一步步分析和解决~
问题根源分析
你提到跳转后重复显示最后一次选中的项20次,大概率是踩了下面这两个常见的新手坑:
- 循环错误地重复添加同一个对象引用:如果你的for循环里只是把
ListView.SelectedItem直接重复添加20次,那全局数组里的所有元素其实都是指向同一个对象的内存引用——看起来是20个项,但本质上是同一个东西,显示自然全是一样的。 - 没有创建对象的副本:就算你需要添加多个相同的食物,也不能直接复用同一个选中对象的引用,否则后续如果修改这个对象的属性(比如数量),数组里的所有项都会跟着变。
具体修正方案
先看你可能写错的代码示例(大概是这样):
// 假设你的全局数组是静态的 public static List<FoodModel> GlobalOrderList = new List<FoodModel>(); // 添加按钮的点击事件 private void AddToOrderBtn_Click(object sender, RoutedEventArgs e) { // 错误:循环20次添加同一个选中项的引用 for (int i = 0; i < 20; i++) { var selectedFood = FoodListView.SelectedItem as FoodModel; GlobalOrderList.Add(selectedFood); } // 跳转到订单页面 Frame.Navigate(typeof(OrderPage)); }
修正1:只添加一次选中项(如果不需要20次)
如果你的需求是点击一次按钮添加一个选中的食物,那直接去掉多余的for循环就行,还要加个空值判断避免报错:
private void AddToOrderBtn_Click(object sender, RoutedEventArgs e) { var selectedFood = FoodListView.SelectedItem as FoodModel; if (selectedFood != null) // 先确认有选中项 { // 如果后续不需要修改这个食物的属性,直接添加即可 GlobalOrderList.Add(selectedFood); // 如果需要修改(比如加数量),一定要创建副本! // 比如给FoodModel加一个克隆方法: // var foodCopy = selectedFood.Clone(); // GlobalOrderList.Add(foodCopy); } Frame.Navigate(typeof(OrderPage)); }
修正2:需要添加多个相同食物时,创建对象副本
如果确实需要添加20份相同的食物,必须为每一份创建新的对象实例,而不是重复加同一个引用。你可以给你的食物类实现一个克隆方法:
// 你的食物模型类 public class FoodModel { public string Name { get; set; } public double Price { get; set; } public int Count { get; set; } // 实现克隆方法,创建新的对象实例 public FoodModel Clone() { return new FoodModel { Name = this.Name, Price = this.Price, Count = this.Count }; } } // 然后修改添加按钮的代码 private void AddToOrderBtn_Click(object sender, RoutedEventArgs e) { var selectedFood = FoodListView.SelectedItem as FoodModel; if (selectedFood != null) { // 循环20次,每次添加一个新的副本 for (int i = 0; i < 20; i++) { var foodCopy = selectedFood.Clone(); GlobalOrderList.Add(foodCopy); } } Frame.Navigate(typeof(OrderPage)); }
额外注意事项
- 全局数组的生命周期:如果是静态全局数组,记得在合适的时机清空(比如用户完成下单后),避免下次打开订单页面还残留之前的内容。
- 空值判断:永远要检查
ListView.SelectedItem是不是null,防止用户没选中任何项就点击按钮导致报错。
内容的提问来源于stack exchange,提问作者Cameron Dyas
相关产品推荐
相关产品推荐

