我想在我的应用程序中静态嵌入两个选项卡,并在选项卡发生更改时收到通知,但我不知道如何维护所有MVVM规则。
我MainViewModel
继承自Conductor<IScreen>.Collection.OneActive
然后我的子视图模型FirstViewModel
和SecondViewModel
继承自Screen
。
现在我的MainView
看起来像这样:
<TabControl x:Name="Items" />
我在我的vm构造函数中附加了我的视图:
Items.AddRange(
new IScreen[]
{
new FirstViewModel(events),
new SecondViewModel(events)
});
但是这样我需要在参数中传递events
(EventAggregator
)。
我希望能够使用[ImportingConstructor]
自动执行此操作。
在我看来,在代码中创建这些视图模型也不合适。我想我应该直接在MainView
中指定这些标签,但是当我这样做时,我不能冒Conductor.Collection.OneActive
和Screen
的事件,如OnActivate
和{ {1}}。
这样做的正确方法是什么?
答案 0 :(得分:1)
假设您的事件聚合器是单例,那么您可以通过构造函数注入将FirstViewModel
和SecondViewModel
注入MainViewModel
来将其留给MEF来解决依赖关系。
由于这两者都依赖IEventAggregator
,因此也会在构建MainViewModel
时解决这个问题。
如果您需要注入事件聚合器的特定实例,或者您希望从MainViewModel
控制子视图模型的实例化,那么您应该引入一个注入的视图模型工厂进入MainViewModel
。