我知道将视图模型绑定到视图是可以的,视图模型包含视图模型是可以的,视图包含视图是可以的。我有一个情况,它似乎需要一个子视图绑定到视图。
特别地,我有一个特定命令的实现不需要在视图模型中,也不需要以任何方式操作视图模型(并且也不影响底层模型-模型)的情况。我可以把命令放在视图模型中,绑定它,然后执行它,但这是一种明确的代码气味,阻碍了视图模型层与视图层的干净分离。
该命令是从父视图发起的,但会影响子视图。我可以想到几种方法来处理这件事。
- 在父级添加事件处理程序,以某种方式找到正确的子级(不确定如何在Silverlight中做到这一点),然后做我需要的所有逻辑。 处理父进程中的事件,但是重新引发一个不同的事件(双重调度)。在子进程中,处理第二个事件,并执行逻辑。
- 将命令绑定到父视图,并在命令本身(或父视图提供的委托)中处理逻辑。
- 直接将该命令绑定到子视图。在这种情况下,我如何在父视图的xaml中指定到右子视图/控件的绑定?
- 将命令绑定到上面定义的子视图的视图模型。
我该怎么办?
MVVM的"No-Code-Behind"规则并不意味着适用于仅与UI相关的代码,例如设置焦点,运行动画,调整大小等。在你的例子中,我会把代码放在视图后面,让一个视图引用另一个。
让你的业务逻辑代码留在你的ViewModels中,而你的Presentation/UI代码留在Views之后,你就很好了