列表视图 - ListView中所选项目的价格计算

时间:2016-03-16 18:02:56

标签: c# listview observablecollection windows-10-universal

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

 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;
     }
}

菜单页面显示的项目很好,可以选择多个项目,但无法找到通过获取所选项目的总和来计算总价格的解决方案。 我知道使用Menulist.selecteditems.price是合适的,但它并没有给我选择。

提前致谢。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以扩展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; 
    }
}

答案 2 :(得分:0)

你提到的“Menulist.selecteditems”是一个可枚举的东西(一组东西)。这意味着它没有一个特定的“价格”属性。相反,您需要在MenuList.SelectedItems中添加每个价格。你可以使用LINQ来快速完成这项工作:

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