MVVM:命令与事件处理程序

3 silverlight command mvvm

我知道这已经干得要命,但大多数的答案都是沿着"是的,你可以,如果你喜欢使用事件处理到位的命令"行.这仍然没有解决的写复杂的命令是否是必要的VS刚刚连线了在代码后面事件处理中调用您的视图模型检验的方法问题.

我不喜欢命令,因为它们产生了很多样板代码并且没有给我任何优于普通方法的好处,而且其中一些(例如拖放)很难实现.

写作有什么问题:

代码隐藏:

private void Button_Click(object sender, RoutedEventArgs e)
{
    viewModel.LoadData();
}
Run Code Online (Sandbox Code Playgroud)

视图模型:

public void LoadData()
{
   //....
}
Run Code Online (Sandbox Code Playgroud)

这与任何命令同样可测试(如果不是更多).IMO,只要UI特定的东西没有泄漏到您的业务逻辑中,就没有必要在这样复杂的模式上浪费时间.思考?

Ree*_*sey 5

写作有什么问题

没什么 - 在大多数情况下.

如果你小心地将业务逻辑保留在文件后面的代码中,那么使用代码背后没有任何问题.这是将它直接委托给ViewModel,这是合理的.

话虽如此,在长期可维护性方面存在一些潜在的弊端:

  1. 通过这样做,您可以更紧密地将View耦合到ViewModel.虽然这是一个合理的事情(View,实际上,总是知道ViewModel),但它确实阻止了View组件在某些情况下的潜在重用,因为使用a ICommand允许您将相同的View与可能不同的ViewModel一起使用.(然而,这在实践中很少见.)
  2. 这开始了一个滑坡 - 通过在代码后面添加"任何"代码,你开辟了另一个开发人员将在那里添加"仅一行"的潜力.随着时间的推移,这会导致一团糟.
  3. 它将代码添加到另一个必须维护的地方.现在,您必须维护ViewModel .cs文件,.xaml文件和代码隐藏文件.
  4. 你很难将这个逻辑连接到一个Button.如果您决定更改控件,使用手势等,则必须记住重写此逻辑.