使用 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 作为 CanExecute
和 Execute
方法的参数。
你所说的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()
。
我遇到了一个其他开发人员可能知道的问题,我正在努力弄清楚并很好地理解它。它不必直接连接到 MVVM/WPF,它也可以连接到其他方法,如 MVC 和 MVP。
假设我有一个购物车模型,它有自己的服务、addItem 和 deleteItem 方法并计算购物车的价格等。
现在,在我的视图中,我显示了这个购物车,当我想显示购物车的总金额时,我单击一个按钮来触发处理此问题的方法。
问题来了:如何将Method(或Command)绑定到Button上?我知道我必须使用 ICommand
,但是通过使用这个接口我有点打破了职责分离的规则。我怎样才能实现,而不破坏 MVVM 模式的规则。
如果我没理解错的话,在您看来您显示了一组 ShopCarts,并且您希望能够调用 ShopCart.calculatePrice()
方法。我会说,您需要做的是将 ICommand 对象存储在您的 ViewModel 中,并将 ShopCart 绑定到 CommandParameter
属性。这样,您将收到 ShopCart 作为 CanExecute
和 Execute
方法的参数。
你所说的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()
。