使用MVVM,当控件没有"Command"属性时该怎么办?

Har*_*rry 5 .net c# wpf mvvm

在我的程序中,我需要一种方法来单击一个Image控件,程序将获取点击发生位置的X,Y位置,然后围绕该位置生成一个矩形.我的问题是我正在使用MVVM,所以我的所有代码都在一个单独的文件中(ViewModel文件而不是代码隐藏文件).Image控件没有Command属性,那么实现它的最佳方法是什么?

Ree*_*sey 9

有几种选择:

  1. 使用代码.在MVVM中不能使用代码并不是一个规则 - 这是一种可能适合的情况.只是让你的代码背后什么也不做,只是将坐标路由到你的ViewModel,并且处理coords的实际"逻辑"在VM中,它仍然是MVVM.
  2. 使用某种形式的附加属性(例如Blend Trigger)来连接它.这是一篇描述一个选项博客文章(基于MVVM Helpers库).

就个人而言,在这种情况下,我可能只是在代码背后使用事件处理程序.我的理由是,无论如何,图像上的点击处理确实是一个视图问题 - 它只是交互.ViewModel可能只有一个方法或命令,它接受一个新的Point,可以从事件处理程序后面的代码中触发,并进行实际处理.

这使您的逻辑保持在ViewModel中并且非常可测试(处理新点很容易测试).View"代码"非常简单,与视图相关.