我有一个菜单,显示来自此类的可观察集合中的项目:
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
是合适的,但它并没有给我选择。
提前致谢。
答案 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)