我有一些ViewModels
来自Screen
对象,我从ShellViewModel
派生了Conductor<T>.Collection.OneActive
。
如果我发出新的ActivateItem
请求,例如:
ActivateItem(new AViewModel());
相关视图在我的ContentControl
中处于有效状态,很棒。如果我再提出另一个请求:
ActivateItem(new BViewModel());
AViewModel
为deactivated
,BViewModel
为active
,但AViewModel
也已关闭。
为防止ViewModel
被关闭,我转而将已经实例化的实例传递给ActivateItem
方法。 显示可以按照我的意愿工作。
我的问题是如何跟踪已创建的ViewModel
,我并不总是想创建新实例。这是因为我希望保持View\ViewModel
的状态,即使用户导航到另一个View
只返回。我可以在我Collection
的{{1}}中维护它们,也可以使用ShellViewModel
中的Items
Collection
。
其中哪一项是正确的,或者是否有更好的解决方案?
答案 0 :(得分:0)
我不一定能说这是否是正确的方法,但是当我使用ViewModel
Conductor<IScreen>.Collection.OneActive
时出现类似情况时,我已经开始使用你的第一个建议了,已在ViewModels
Conductor
上保留了ViewModel
的集合。
我发现它在概念上非常方便,因为它似乎与构建其他ViewModels
时的构图想法一致。我发现自己偶尔预装某些ViewModels
,假设他们可能希望稍后激活。我还使用了这样一个列表来跟踪从ViewModels
集合中删除后关闭/删除的Items
(尽管那是非常具体的,我不确定这是不是很好实践)。
对于大多数简单的情况,您可以使用Items
集合执行此操作,并且可能根本不会遇到任何问题。
答案 1 :(得分:0)
我不会为此使用单独的集合,因为迟早会遇到同步问题(与线程无关),或者换句话说,您需要保留自定义集合并且Items
集合彼此同步,添加更多,这将导致更多的混淆。
我肯定会使用Items
集合,因为它就是出于此目的。