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

时间:2013-10-25 06:46:48

标签: c# wpf mvvm caliburn.micro

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

MainViewModel继承自Conductor<IScreen>.Collection.OneActive

然后我的子视图模型FirstViewModelSecondViewModel继承自Screen

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

<TabControl x:Name="Items" />

我在我的vm构造函数中附加了我的视图:

Items.AddRange(
    new IScreen[]
    {
        new FirstViewModel(events),
        new SecondViewModel(events)
    });

但是这样我需要在参数中传递eventsEventAggregator)。

我希望能够使用[ImportingConstructor]自动执行此操作。

在我看来,在代码中创建这些视图模型也不合适。我想我应该直接在MainView中指定这些标签,但是当我这样做时,我不能冒Conductor.Collection.OneActiveScreen的事件,如OnActivate和{ {1}}。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

假设您的事件聚合器是单例,那么您可以通过构造函数注入将FirstViewModelSecondViewModel注入MainViewModel来将其留给MEF来解决依赖关系。

由于这两者都依赖IEventAggregator,因此也会在构建MainViewModel时解决这个问题。

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