首页 文章

在MVVM中,ViewModel响应View中用户操作的最佳方式是什么?

提问于
浏览
21

我理解在MVVM中:

  • View了解ViewModel

  • ViewModel了解Model

  • 但它不能向上运行,因此模型对ViewModel一无所知

  • 并且ViewModel对View一无所知

所以 how does the ViewModel respond to actions that the user does on the View ,例如在TextBox中键入内容或移动滑块等 .

  • 我知道这是用 RoutedEvents 完成的,但我发现几乎所有的RoutedEvent示例都在View中使用CodeBehind,这正是你在MVVM中不再拥有的 .

  • 所以留下了 RoutedCommands ,我在MVVM中找到了更多的例子,例如从某种意义上说,移动滑块确实不是命令,它是一个事件,所以我想知道这是否真的应该使用 .

  • 然后我read advice,例如“在MVVM use RoutedEvents as little as possibleno RoutedCommands 中” . 好 .

  • 所以离开,例如在WPF团队自己的WPF Model-View-ViewModel Toolkit 0.1项目中你有一个“ DelegateCommand ”,看起来也很有趣 .

  • 然后有些人也在使用“ RelayCommand ” .

对于开发应用程序这样核心的事情,这是很多选择和困惑 .

What is the best way to simply do in MVVM what we were doing for the last 10 years with Code Behind

  • 创建按钮

  • 双击按钮

  • 写处理代码

2 回答

  • 11

    需要明确的是,当人们提到 DelegateCommandRelayCommand 时,他们真的在谈论同样的事情:ICommand的一个实现,它允许你传入一个委托 . 您可以互换使用它们 .

    就我而言,将视图(XAML)绑定到ViewModel中的DelegateCommands是实现MVVM的最佳方式 .

    我尽可能远离RoutedEvents和代码隐藏 .

  • 6

    对于按钮和其他触发器,我使用WPF提供的ICommand接口,其方式与链接到的DelegateCommand类似 . (实际上我使用了定义的here的中继命令)

    当您更改值(移动滑块,键入文本框)时,使用绑定并在设置ViewModel中的属性时处理行为 .

    通常我发现在MVVM应用程序中使用RoutedEvents的理由很少,但是当你无法通过新的WPF特定方法实现你想要的东西时,它们是一个很好的,熟悉的舒适毯 .

相关问题