如何将ViewModel分成多个?

时间:2015-01-29 14:03:53

标签: c# wpf mvvm .net-4.0 catel

根据this question的评论,我觉得有必要问这个。

这是我目前正在处理的一个应用程序,并且为了避免进一步的问题并继续与Catel合作(无论我遇到什么麻烦,使用它真的很愉快),我将需要解释一些主题。


我有一个API类(让我们称之为API),它包含几种连接到某个内容管理器并对其执行操作的方法。 它是一个单独的课程,我想分成几个Model课程(例如,两个课程会这样做):

  • Connection:非常不言自明,将包含两个Commands来电API.ConnectAPI.Disconnect
  • DataSource:表示应用程序在内容管理器中的位置/内容,其中一个Command来电API.LoadDataSource

就模型而言,没关系,没什么太难的。我的第一个问题是相关的ViewModels;我需要在每一个中使用相同的API实例。所以现在,我只使用一个ViewModel,与UserControls关联的Models只是从我的MainWindow继承它(这些是常规UserControls,而不是Catel' s,否则它因为没有ViewModel而对我大吼大叫。)

由于Catel不太喜欢嵌套的视图模型,这是我的问题:

如何在各种ViewModel之间传递/使用参数?(或如何在不使用嵌套视图模型的情况下分离我的主ViewModel?

1 个答案:

答案 0 :(得分:1)

当我需要在应用程序中保持状态时,我会使用服务。视图模型是视图的表示,仅在视图处于活动/可见时才存在。 State超越了它,需要在不同的视图模型中管理整个应用程序。

因此,我总是选择拥有持有该州的服务。此服务在ServiceLocator(IoC容器)中注册,并将通过依赖注入注入到视图模型中。

这样,您可以在加载视图模型时始终检索信息。执行此操作的最佳方法是使用 Initialize 方法(您还应在此处订阅您的事件)。您应该在视图模型的 Close 方法中清理视图模型(取消订阅事件)。