【问题标题】:How To Get Total Prices From ListView Collection in Xamarin Forms如何从 Xamarin 表单中的 ListView 集合中获取总价格
【发布时间】:2020-07-29 06:17:50
【问题描述】:

我一直在网上寻找一个简单的解决方案,但似乎找不到任何解决方案。

我只是想从我的列表视图集合中的所有项目价格中生成一个总价格,但似乎无法弄清楚如何做到这一点。

如何将列表中的所有产品价格添加到总标签上?

这是我的代码:

public ViewFBShoppingCart()
        {
            InitializeComponent();

            ObservableCollection<FBProduct> fbproducts = new ObservableCollection<FBProduct>();
            shoppingcartlistview.ItemsSource = fbproducts;

            var producttitle = "Apple";
            var productprice = "$37.95";
            var productimage = "image link goes here";

            var producttitle2 = "Pear";
            var productprice2 = "$32.95";
            var productimage2 = "image link goes here";

            fbproducts.Add(new FBProduct
            {
                ProductName = producttitle,
                ProductPrice = productprice,
                ProductImage = productimage
            }); 

            fbproducts.Add(new FBProduct
            {
                ProductName = producttitle2,
                ProductPrice = productprice2,
                ProductImage = productimage2
            });


        }

【问题讨论】:

  • 您一般不会,您通常会查询底层集合。此外,我们通常将数字类型保留为数字类型而不是字符串

标签: c# ios xamarin xamarin.forms shopping-cart


【解决方案1】:

我建议不要使用像 "$35.00" 这样的格式化字符串,您可以稍后在 .xaml 文件中使用 Text="{Binding ProductPrice, StringFormat='${0}'} 对其进行格式化

但在这种情况下:你可以使用Linq

string total = fbproducts.Select(a => new { Converted = Convert.ToDouble(a.ProductPrice.Replace("$", "")) }).ToList().Sum(a => a.Converted).ToString("#,0.00");

【讨论】:

  • 非常感谢!您的代码有效!完美的胜利!
【解决方案2】:
string TotalProductPrices(ObservableCollection<FBProduct> fbproducts)
{
    var total = fbproducts.Sum(x => decimal.Parse(x.ProductPrice, NumberStyles.Currency));
    return total.ToString("c");
}

【讨论】:

  • 非常感谢! :)
【解决方案3】:

假设您遵循 MVVM 模式,首先订阅您的集合的事件 fbproducts.CollectionChanged += fbproducts_CollectionChanged,然后在基于 NotifyCollectionChangedEventArgs 的方法中,每次添加或删除项目时,您应该引发新的只读属性的属性更改事件使用循环或 1 行 Linq 计算总和。

    private void fbproducts_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if(e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Remove)
        {
            RaisePropertyChanged(nameof(PriceSum));
        }
    }

    public decimal PriceSum => fbproducts.Sum(x => decimal.Parse(x.ProductPrice.Substring(1)));

您还应该考虑将ProductPrice 类型更改为decimal 而不是string

【讨论】:

  • 非常感谢您!总工作量,我正在整合属性更改事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多