我的目标是让ViewModel告诉View呈现MessageBox并向用户提问。
我不希望ViewModel对Windows特定代码有任何引用。
我花时间下载并安装MVVM Light Toolkit。现在我发现即使使用工具包,我的ViewModel也需要引用System.Windows,以便解决MessageBoxButton和MessageBoxResult之类的问题。
为什么要完成所有这些额外的工作,当你最终得到一个引用System.Windows的ViewModel时?我不妨直接从ViewModel调用MessageBox.Show()。基本上我没有通过使用MVVM工具包保存任何东西,所以我只是不明白为什么我会使用它。
如果我仍然需要在我的ViewModel中引用System.Windows,有人可以向我解释一下,为什么要经过这项工作?
谢谢,休
答案 0 :(得分:0)
使用MessageBox类时,需要对System.Windows.Forms.dll的引用。 MVVM-Light不需要此引用。
答案 1 :(得分:0)
它没有破坏工具包的目的。该工具包提供了一个轻量级框架,用于将视图与模型分离,这对单元测试非常有用。
他们重复使用枚举,因此他们不必重写它们。重用UI特定枚举肯定有点奇怪,但至少它们不是事件处理程序和事件参数。
最后,MVVM使用命令,这需要实现ICommand接口。该接口位于PresentationCore中,甚至更具有UI特性:)
总的来说,目的不是删除引用,因为它不能尽可能地使用这些引用,并且枚举肯定不会破坏模式。
答案 2 :(得分:0)
mvvm light工具包可以帮助您实现mvvm模式。 mvvm light工具包还具有可混合的非常好的优点,(为您量身定做一些调整,因此您可以非常轻松地使用Expression Blend进行设计)。 Mvvm模式也非常有助于(正如其他人所说)对应用程序进行测试,因为很难测试视图,但测试viewModel要容易得多。
如果您想知道为什么要通过这项工作并使用mvvm灯,我建议您检查this related answer
希望它有所帮助,祝你好运!