根据this question的评论,我觉得有必要问这个。
这是我目前正在处理的一个应用程序,并且为了避免进一步的问题并继续与Catel合作(无论我遇到什么麻烦,使用它真的很愉快),我将需要解释一些主题。
我有一个API类(让我们称之为API
),它包含几种连接到某个内容管理器并对其执行操作的方法。
它是一个单独的课程,我想分成几个Model
课程(例如,两个课程会这样做):
Connection
:非常不言自明,将包含两个Commands
来电API.Connect
和API.Disconnect
DataSource
:表示应用程序在内容管理器中的位置/内容,其中一个Command
来电API.LoadDataSource
就模型而言,没关系,没什么太难的。我的第一个问题是相关的ViewModels
;我需要在每一个中使用相同的API
实例。所以现在,我只使用一个ViewModel,与UserControls
关联的Models
只是从我的MainWindow
继承它(这些是常规UserControls,而不是Catel' s,否则它因为没有ViewModel而对我大吼大叫。)
由于Catel不太喜欢嵌套的视图模型,这是我的问题:
如何在各种ViewModel之间传递/使用参数?(或如何在不使用嵌套视图模型的情况下分离我的主ViewModel?)
答案 0 :(得分:1)
当我需要在应用程序中保持状态时,我会使用服务。视图模型是视图的表示,仅在视图处于活动/可见时才存在。 State超越了它,需要在不同的视图模型中管理整个应用程序。
因此,我总是选择拥有持有该州的服务。此服务在ServiceLocator(IoC容器)中注册,并将通过依赖注入注入到视图模型中。
这样,您可以在加载视图模型时始终检索信息。执行此操作的最佳方法是使用 Initialize 方法(您还应在此处订阅您的事件)。您应该在视图模型的 Close 方法中清理视图模型(取消订阅事件)。