问题。我想从我的View中调用ViewModel-Command。我遇到的问题是:无法绑定Command参数。让我们说吧。用户单击项目。我想传递给我的ViewModel Command一个包含属性的对象:CurrentEntity,PositionX,PositionY。 (这是一个面向图形的应用程序。这就是我将X,Y位置传递给我的viewmodel的原因。我必须将值存储在DB中。) 现在你将如何解决这个问题?如何从View绑定命令并传递此特定命令参数对象?
我现在所做的:我有一个特殊的界面,由VM实现的Command定义。然后......在我看来(代码隐藏)我将DataContext转换为此Command接口,然后从代码后面调用Command(事件处理程序)。但它确实没有意义......因为在这种情况下我可以调用一个简单的ViewModel函数。 (如果我不需要CanExecute功能) 这是一个很好的设计吗?我不喜欢的是......一些命令绑定在XAML中,一些在代码隐藏中。从架构的角度来看,这有点令人困惑。
我清楚了吗?
由于
答案 0 :(得分:2)
最重要的是ViewModel不包含任何特定于View的代码。允许View执行它需要做的任何事情,以便使用底层的ViewModel。
使用命令将View绑定到ViewModel很方便,因为它可以实现简单,易读和可测试的XAML代码;但是如果你有一个复杂的使用场景需要一些代码隐藏来将View的数据“转换”为ViewModel可以使用的东西(在这种情况下:coordinates和CurrentEntity),那么使用事件处理程序是完全可以接受的,如果需要,手动执行命令绑定(甚至VM上的公共方法)。
我们的想法是确保您的代码可以进行单元测试:根据您的描述,我认为您完全安全。
如果您希望仅使用命令使代码严格适合“MVVM”模具,那么您可以使用自定义行为或EventTriggers来“桥接”View和ViewModel的Command绑定之间的差距。 / p>