我有一些用三个ViewModel编写的通用代码,应该重构。我已经在app.xaml.cs中的方法中移动了代码。这是一种正确的方法吗?现在我必须从ViewModels调用这个方法,我应该从所有ViewModes中引发一个自定义事件并在app.xaml.cs上处理它吗?如果是,这意味着我必须在app.xaml.cs页面上创建ViewModel的引用(我们使用的是Unity)。 这看起来是对的吗?我是MVVM的新手,还有其他任何建议吗?
任何帮助将不胜感激。
答案 0 :(得分:5)
您尚未提及代码是什么。为什么它在App.xaml.cs文件中?
您需要从三个不同的ViewModel调用它的事实表明您应该将其重构为:
ViewModel的工作是保存和整形(或转换)准备显示的数据,但它不应该知道显示。它也不应该知道App.xaml.cs的内容,特别是因为你的ViewModel可能最终与App.xaml文件完全不同的模块或程序集。
答案 1 :(得分:0)
任何时候你都有“交叉切割”的挑战,例如2个完全独立的对象需要通信的地方,事件风格(发布者/订阅者)模式运作良好。
如果您使用的是Unity,请使用EventAggregator。
通过这种方式,您只需从VM发布一个事件,并让app.xaml.cs监听该事件。
这样你就不必让你的虚拟机了解app.xaml.cs。