Listview - ListView中选中商品的价格计算

Listview - Price calculation of selected items in ListView

我有一个菜单,显示来自此 class 的可观察集合中的项目:

 class DeHavMenu
{
    private string foodName;
    private double price;

    public string FoodName
    {
        get {return foodName; }

        set {  foodName = value; }
    }

    public double Price
    {
        get {return price;}

        set {  price = value; }
    }

    public DeHavMenu(string f, double p)
    {
        this.foodName = f;
        this.price = p;
    }

   public override string ToString()
    {
        return (this.FoodName + " Price: £" + this.Price);
    }

}

现在在菜单页面上,我在页面上添加项目以在列表视图中显示它:

public sealed partial class DeHavillandMenu : Page
{
    private ObservableCollection<DeHavMenu> menuItems = new ObservableCollection<DeHavMenu>();
    public DeHavillandMenu()
    { this.InitializeComponent();
        MenuList.SelectionMode = ListViewSelectionMode.Multiple;
        this.menuItems = new ObservableCollection<DeHavMenu>();
        this.menuItems.Add(new DeHavMenu("Sausage/Bacon roll and hot drink", 2.25));
        this.menuItems.Add(new DeHavMenu("5 item cooked breakfast and hot drink", 2.75));
        this.menuItems.Add(new DeHavMenu("Pizza with selection of pasta, wedges and garlic bread", 4.25));
        this.menuItems.Add(new DeHavMenu("Baked / grilled Halal chicken with piri piri", 6.50));
        this.menuItems.Add(new DeHavMenu("Baked / grilled Halal chicken with tandoori", 6.50)); 
        MenuList.DataContext = menuItems;
     }
}

菜单页面显示商品正常,可以select多个商品正常,但找不到通过取select个商品的总和来计算总价的解决方案。 我知道使用 Menulist.selecteditems.price 是合适的,但它没有让我选择。

提前致谢。

double sum = 0;
foreach(ListViewItem Item in MenuList.SelectedItems)
{
    sum += double.Parse(Item.SubItems[1].Text);
}

您可以扩展 ObservableCollection 以创建 Menu 类型。这样,无论何时您想要获得总数,您都可以使用自动计算的 属性。您还需要更新 DeHavMenu 以获得 IsSelected 属性(这将绑定在 XAML 中或以编程方式设置)。

菜单:

public class Menu : ObservableCollection<DeHavMenu>
{
    public double TotalPrice 
    {
        get 
        { 
            var totalPrice = 0.0;
            foreach (var menuItem in this)
            {
                if (menuItem.IsSelected)
                {
                    totalPrice += menuItem.Price;
                }
            }
            return totalPrice;
        }
    }
}

更新项目

public class DeHavMenu
{
    private string foodName;
    private double price;
    private bool isSelected;

    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            isSelected = value;
            RaisePropetyyChanged(); // If XAML data-binding
        }
    }

    public string FoodName
    {
        get {return foodName; }

        set {  foodName = value; }
    }

    public double Price
    {
        get {return price;}

        set {  price = value; }
    }

    public DeHavMenu(string f, double p)
    {
        this.foodName = f;
        this.price = p;
    }

    public override string ToString()
    {
        return (this.FoodName + " Price: £" + this.Price);
    }
}

然后,将您的菜单项更新为:

this.menuItems = new Menu();

现在,您可以通过以下方式获得总数:

var menu = this.menuItems as Menu;
if (menu != null)
{
    var total = menu.TotalPrice;
}

如果您没有使用 DataBinding,并且正在设置代码隐藏,您可以在获取 TotalPrice 之前添加以下代码。

foreach (var item in Menu)
{
    item.IsSelected = false; // reset to default
}

foreach(var selectedItem in Menulist.selecteditems)
{
    var deHavMenu = selectedItem as DeHavMenu;
    if (devHavMenu != null)
    {
        devHavMenu.IsSelected = true; 
    }
}

你说的"Menulist.selecteditems"是一个可枚举的(某物的集合)。这意味着它没有一个特定的 "Price" 属性。相反,您需要将 MenuList.SelectedItems 内的每个价格相加。您可以使用 LINQ 通过以下方式快速完成此操作:

MenuList.SelectedItems.Sum(x => x.Price)