从ViewModel调用app.xaml.cs中的方法

时间:2011-11-16 22:15:52

标签: silverlight mvvm

我有一些用三个ViewModel编写的通用代码,应该重构。我已经在app.xaml.cs中的方法中移动了代码。这是一种正确的方法吗?现在我必须从ViewModels调用这个方法,我应该从所有ViewModes中引发一个自定义事件并在app.xaml.cs上处理它吗?如果是,这意味着我必须在app.xaml.cs页面上创建ViewModel的引用(我们使用的是Unity)。 这看起来是对的吗?我是MVVM的新手,还有其他任何建议吗?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

您尚未提及代码是什么。为什么它在App.xaml.cs文件中?
您需要从三个不同的ViewModel调用它的事实表明您应该将其重构为:

  • 一个静态帮助器类型
  • 您的ViewModelss继承自
  • 的基类

ViewModel的工作是保存和整形(或转换)准备显示的数据,但它不应该知道显示。它也不应该知道App.xaml.cs的内容,特别是因为你的ViewModel可能最终与App.xaml文件完全不同的模块或程序集。

答案 1 :(得分:0)

任何时候你都有“交叉切割”的挑战,例如2个完全独立的对象需要通信的地方,事件风格(发布者/订阅者)模式运作良好。

如果您使用的是Unity,请使用EventAggregator。

通过这种方式,您只需从VM发布一个事件,并让app.xaml.cs监听该事件。

这样你就不必让你的虚拟机了解app.xaml.cs。