【发布时间】:2011-06-28 18:57:00
【问题描述】:
我知道这已经被做死了,但大多数答案都是“是的,如果你愿意,你可以使用事件处理程序代替命令”。这仍然不能解决是否需要编写复杂命令而不是仅仅在代码中连接事件处理程序以调用视图模型中的可测试方法的问题。
我不喜欢命令,因为它们会生成大量样板代码,并且与普通方法相比没有任何好处,而且其中一些(例如拖放)很难实现。
写作有什么问题:
代码隐藏:
private void Button_Click(object sender, RoutedEventArgs e)
{
viewModel.LoadData();
}
视图模型:
public void LoadData()
{
//....
}
这与任何命令一样可测试(如果不是更多的话)。 IMO,只要 UI 特定的东西没有泄漏到您的业务逻辑中,就真的没有必要在这样的复杂模式上浪费时间。想法?
【问题讨论】:
-
顺便说一句,我知道至少有一个框架有一些聪明的基础设施,可以让你绑定到 LoadData() 和可选的 CanLoadData() 方法。这不是框架的插件(caliburn/caliburn.micro),我不推荐初学者使用。但是看到其他框架,我不会感到震惊,甚至可能最终 MS 也会效仿,它是一个将逻辑保存在视图模型中的插件,还有一个额外的好处是有可能迁移到这样的框架并拥有你的蛋糕也吃一些。不过,我会说,先把它收起来,然后按照命令去做。 HTH
标签: silverlight mvvm command