0

我有一些ViewModelsScreen对象派生的,我ShellViewModelConductor<T>.Collection.OneActive.

如果我提出新的ActivateItem请求,例如:

ActivateItem(new AViewModel());

关联的视图在 my 中被激活ContentControl,很好。如果我再提出另一个请求:

ActivateItem(new BViewModel());

AViewModelisdeactivatedBViewModelis made active,然而,AViewModel也是封闭的。

为了防止ViewModel关闭,我将已经实例化的实例传递给ActivateItem方法。这似乎按我的意愿工作。

我的问题是如何跟踪ViewModel已经创建的 s,我并不总是想创建新实例。这样做的原因是我想保持 a 的状态,View\ViewModel即使用户导航到另一个View只是为了返回。我可以Collection在我的 a 中维护它们,也ShellViewModel可以Items CollectionConductor.

其中哪一个是正确的(如果有的话),还是有更好的解决方案来解决我的问题?

4

2 回答 2

0

我不一定说这是否是正确的方法,但是当我遇到类似的情况时,我使用了ViewModelderived from Conductor<IScreen>.Collection.OneActive,我已经开始使用你的第一个建议,并ViewModelsConductor ViewModel.

我发现它在概念上非常方便,因为它似乎与构建其他ViewModels. 我发现自己偶尔会预加载某些ViewModels内容,假设它们可能希望稍后被激活。我还使用这样的列表来跟踪ViewModels它们从Items集合中删除后关闭/删除的情况(尽管这是非常具体的事情,但我不确定这是否是一种好习惯)。

对于大多数简单的情况,您可以使用Items集合来完成,并且可能根本不会遇到任何问题。

于 2013-10-30T22:55:29.420 回答
0

我不会为此使用单独的集合,因为迟早您会遇到同步问题(与线程无关),或者换句话说,您需要保持自定义集合和Items集合彼此同步,添加更多的是这会引起更多的混乱。

我肯定会使用该Items系列,因为它是为此目的而存在的。

于 2013-10-31T14:03:17.873 回答