C# 在TabControl中嵌入选项卡的正确方法是什么

C# 在TabControl中嵌入选项卡的正确方法是什么,c#,wpf,mvvm,caliburn.micro,C#,Wpf,Mvvm,Caliburn.micro,我希望在我的应用程序中静态嵌入两个选项卡,并在选项卡更改时得到通知,但我不知道如何维护所有MVVM规则 我有MainViewModel,它继承自Conductor.Collection.OneActive 然后我得到了从屏幕继承的子视图模型FirstViewModel和SecondViewModel 现在我的MainView看起来就像这样: 我将我的视图附加到它的vm构造函数中: Items.AddRange( new IScreen[] { new First

我希望在我的应用程序中静态嵌入两个选项卡,并在选项卡更改时得到通知,但我不知道如何维护所有MVVM规则

我有
MainViewModel
,它继承自
Conductor.Collection.OneActive

然后我得到了从
屏幕继承的子视图模型
FirstViewModel
SecondViewModel

现在我的
MainView
看起来就像这样:

我将我的视图附加到它的vm构造函数中:

Items.AddRange(
    new IScreen[]
    {
        new FirstViewModel(events),
        new SecondViewModel(events)
    });
但这样我需要在params中传递
事件
EventAggregator

我希望能够使用
[ImportingConstructor]
自动完成

而且,在代码中创建这些视图模型对我来说也不合适。我想我应该直接在
MainView
中指定这些选项卡,但当我这样做时,我不能冒险使用
Conductor.Collection.OneActive
Screen
的事件,如
OnActivate
OnDeactivate


正确的方法是什么?

假设您的事件聚合器是单例的,那么您可以让MEF通过构造函数注入将
FirstViewModel
SecondViewModel
注入到
MainViewModel
中来解决依赖关系

由于它们都依赖于
IEventAggregator
,这也将作为构建
MainViewModel
的一部分来解决

如果需要注入事件聚合器的特定实例,或者希望从
MainViewModel
控制子视图模型的实例化,则应引入视图模型工厂,该工厂将注入到
MainViewModel