簡體   English   中英

每當我單擊 C# 中的按鈕時,如何將 Append 項添加到另一個 Window 中的列表框?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM