使用 MVVM 模式在 WPF 中使用命令

Using Commands in WPF using the MVVM pattern

我遇到了一个其他开发人员可能知道的问题,我正在努力弄清楚并很好地理解它。它不必直接连接到 MVVM/WPF,它也可以连接到其他方法,如 MVC 和 MVP。

假设我有一个购物车模型,它有自己的服务、addItem 和 deleteItem 方法并计算购物车的价格等。

现在,在我的视图中,我显示了这个购物车,当我想显示购物车的总金额时,我单击一个按钮来触发处理此问题的方法。

问题来了:如何将Method(或Command)绑定到Button上?我知道我必须使用 ICommand,但是通过使用这个接口我有点打破了职责分离的规则。我怎样才能实现,而不破坏 MVVM 模式的规则。

如果我没理解错的话,在您看来您显示了一组 ShopCarts,并且您希望能够调用 ShopCart.calculatePrice() 方法。我会说,您需要做的是将 ICommand 对象存储在您的 ViewModel 中,并将 ShopCart 绑定到 CommandParameter 属性。这样,您将收到 ShopCart 作为 CanExecuteExecute 方法的参数。

你所说的PresentationModel,就是WPF中的ViewModel,也就是DataContext观点。
此 ViewModel 包含 ShopCart 的一个实例。它还包含命令,以便视图可以绑定到它们。
命令,我们将其命名为 CalculatePrice 应该只调用 ShopCart.

calculatePrice() 方法

问题是,你是如何定义它的:
好吧,我喜欢使用 RelayCommand,它允许您使用 lambda 表达式定义命令。

那么你可以有一个属性 public RelayCommand CalculatePrice,你在构造函数中定义:

public ViewModel(){
    CalculatePrice = new RelayCommand(param => this.ShopCart.calculatePrice());
}

这样,您可以将 CalculatePrice 命令绑定到按钮,然后执行 ShopCart.calculatePrice()