![](/img/trans.png)
[英]How do I click a button that will remove an item from a ListBox and the List that holds the information for the ListBox in C#?
[英]How Do I Append Items to a Listbox in Another Window Whenever I Click a Button in C#?
我正在 Wawa 触摸屏模拟器上开发 WPF 应用程序。 每当我单击菜单中的一个按钮(例如饮料)时,该项目的名称和价格将显示在另一个 window 的列表框中(例如,“Frozen Smoothie”,1.99)。 下面的图片显示了正在发生的事情。
但是,如果我 select 另一个项目(例如,冷冻卡布奇诺),该项目的信息将替换我之前选择的项目。
我制作了一个收据 class,它采用食品的名称和价格来创建一个名为 foodItem 的收据 object,并将其添加到列表框中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Wawa_TouchScreen
{
public class Receipt
{
private string foodItemName;
private double price;
public Receipt(string foodItemName, double price)
{
this.foodItemName = foodItemName;
this.price = price;
}
public override string ToString()
{
string foodItem = foodItemName + " $" + price;
return foodItem.ToString();
}
public string getFoodItemName()
{
return foodItemName;
}
public double getPrice()
{
return price;
}
}
}
这是饮料 window 的代码:
public partial class Window1 : Window
{
public string foodItemName;
public double price;
private void frozenSmoothieBtn_Click(object sender, RoutedEventArgs e)
{
foodItemName = "Frozen Smoothie";
price = 1.99;
Receipt foodItem = new Receipt(foodItemName, price);
MessageBox.Show("You have chosen a frozen smoothie.", foodItemName);
Window2 checkOut = new Window2();
checkOut.Show();
this.Visibility = Visibility.Hidden;
checkOut.lstBoxReceipt.Items.Add(foodItem);
}
private void frozenCappuccinoBtn_Click(object sender, RoutedEventArgs e)
{
foodItemName = "Frozen Cappucino";
price = 1.99;
Receipt foodItem = new Receipt(foodItemName, price);
MessageBox.Show("You have chosen a frozen cappuccino.", foodItemName);
Window2 checkOut = new Window2();
checkOut.Show();
this.Visibility = Visibility.Hidden;
checkOut.lstBoxReceipt.Items.Add(foodItem);
}
}
}
如果您能提供任何帮助,我将不胜感激。 谢谢!
要立即解决您的问题,您需要创建一个共享列表 (orderList) 以绑定到 lstBoxReceipt 列表框。 所有添加和删除 Receipt 类型的操作都应该在共享列表上执行。
我们使用 ObservableCollection 而不是 List,因为如果您使用 List,您对基础列表 object 的更改将不会立即显示在 Listbox 上。 它只会显示第一个项目。
此外,尝试通过重构按钮单击事件来改进您的代码,以调用将收据添加到列表的方法和另一个显示结帐 window 的方法。通过将 window 创建代码移到事件代码之外来实例化结帐 window 一次。
public partial class MainWindow : Window
{
public string foodItemName;
public double price;
//Add a shared list that you operate on adding and removing your food items from
//then assign it to the lstBoxReceipt.ItemsSource
ObservableCollection<Receipt> orderList = new ObservableCollection<Receipt>();
//Instantiate the checkOut window
Window2 checkOut = new Window2();
private void frozenSmoothieBtn_Click(object sender, RoutedEventArgs e)
{
foodItemName = "Frozen Smoothie";
price = 1.99;
Receipt foodItem = new Receipt(foodItemName, price);
MessageBox.Show("You have chosen a frozen smoothie.", foodItemName);
orderList.Add(foodItem);
checkOut.Show();
this.Visibility = Visibility.Hidden;
//Add the order list as the data source of the listbox.
checkOut.lstBoxReceipt.ItemsSource = orderList;
}
private void frozenCappuccinoBtn_Click(object sender, RoutedEventArgs e)
{
foodItemName = "Frozen Cappucino";
price = 1.99;
Receipt foodItem = new Receipt(foodItemName, price);
MessageBox.Show("You have chosen a frozen cappuccino.", foodItemName);
orderList.Add(foodItem);
checkOut.Show();
this.Visibility = Visibility.Hidden;
//Add the order list as the data source of the listbox.
checkOut.lstBoxReceipt.ItemsSource = orderList;
}
}
我正在 Wawa 触摸屏模拟器上开发 WPF 应用程序。 每当我单击菜单中的按钮(例如,饮料)时,项目的名称和价格将显示在另一个 window 的列表框中(例如,“Frozen Smoothie”,1.99)。 下面的图片显示了正在发生的事情。
但是,如果我 select 另一个项目(例如,冷冻卡布奇诺),该项目的信息将替换我之前选择的项目。
我制作了一个收据 class,它采用食品的名称和价格来创建一个名为 foodItem 的收据 object,它被添加到列表框中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Wawa_TouchScreen
{
public class Receipt
{
private string foodItemName;
private double price;
public Receipt(string foodItemName, double price)
{
this.foodItemName = foodItemName;
this.price = price;
}
public override string ToString()
{
string foodItem = foodItemName + " $" + price;
return foodItem.ToString();
}
public string getFoodItemName()
{
return foodItemName;
}
public double getPrice()
{
return price;
}
}
}
这是饮料 window 的代码:
public partial class Window1 : Window
{
public string foodItemName;
public double price;
private void frozenSmoothieBtn_Click(object sender, RoutedEventArgs e)
{
foodItemName = "Frozen Smoothie";
price = 1.99;
Receipt foodItem = new Receipt(foodItemName, price);
MessageBox.Show("You have chosen a frozen smoothie.", foodItemName);
Window2 checkOut = new Window2();
checkOut.Show();
this.Visibility = Visibility.Hidden;
checkOut.lstBoxReceipt.Items.Add(foodItem);
}
private void frozenCappuccinoBtn_Click(object sender, RoutedEventArgs e)
{
foodItemName = "Frozen Cappucino";
price = 1.99;
Receipt foodItem = new Receipt(foodItemName, price);
MessageBox.Show("You have chosen a frozen cappuccino.", foodItemName);
Window2 checkOut = new Window2();
checkOut.Show();
this.Visibility = Visibility.Hidden;
checkOut.lstBoxReceipt.Items.Add(foodItem);
}
}
}
我很感激你能提供的任何帮助。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.