我正在尝试在我的应用中实施购物车系统,这比我预期的更加混乱/困难。
目前我的实现如下:
public class CartItem
{
public Product Product { get; set; }
public int Quantity { get; set; }
public decimal Subtotal { get { return Quantity * Product.Price; } }
}
public class Cart
{
public ObservableCollection<CartItem> CartItems { get; set; }
public int ItemCount { get; set; }
public decimal Total { get; set; }
public ICommand AddItemCommand { get; set; }
public ICommand RemoveItemCommand { get; set; }
public void AddItem(Product product)
{
}
public void RemoveItem(Product product)
{
}
}
具体来说,我很难找到它在MVVM模式中的位置。此实现有效,直到Quantity
上的CartItem
变量被其所属的Cart
(例如视图)以外的其他内容修改。
我问过自己的一些问题:
答案 0 :(得分:0)
我要说的是我看MVVM的方式,所以也许它并不完全准确,但我已经看到其他人也这么认为。
在我看来,Cart和CartItem都是Model。
当我构建MVVM应用程序时,我有:
模型:它似乎是DTO模型,每个属性都实现了INotifyPropertyChanged(如果使用MVVM-Light插件,则为RaisePropertieChanged)。
该模型可以具有一些&#34; Helper属性&#34;。例如,您的&#34;小计&#34; propertie。
显然还有服务层,但这不是重点。
要将模型映射到DomainModel,我使用Automapper。这很简单。
你可以合并Model和DomainModel图层,但是我不喜欢这样。 无论如何,我使用PocoGenerator库,因此每次更新数据库结构时都会擦除MVVM代码。
最后一件事,我发现使用MVVM-Light非常有帮助。但是,再一次,这只是我的观点。
编辑:
我忘记了: 我认为ICommand和方法不应该存在。所有ICommand都必须放在ViewModel类中。