任何人都可以提供Conductor <T> .Collection.AllActive用法的任何简单工作示例吗?

Eng*_*ock 6 wpf caliburn.micro

这有点奇怪,但我真的无法在任何地方找到一个有效的例子.

顺便说一下,如果这很重要的话,我正在使用ViewModel-first方法(在WPF中).

先感谢您.

Pet*_*son 12

如果你看一下这里的讨论,你会发现AllActive的意图是将几个Views/ViewModel组合成一个包含ViewModel.从你之前的评论来看,似乎这就是你所期待的,但我想我至少会在这里引用它.

然后,您可以在View的不同区域激活3个不同的ViewModel.我过去处理这个问题的方法是在视图中使用单独的属性来绑定/引用ViewModel,然后将所有这些属性添加到Items中以获取Conductor行为.

public sealed class MyViewModel : Conductor<Screen>.Collection.AllActive
{
    public MyViewModel(IMagicViewModelFactory factory)
    {
        FirstSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
        SecondSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
        ThirdSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();

        Items.Add(FirstSubViewModel);
        Items.Add(SecondSubViewModel);
        Items.Add(ThirdSubViewModel);
    }

    public Screen FirstSubViewModel { get; private set; }
    public Screen SecondSubViewModel { get; private set; }
    public Screen ThirdSubViewModel { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

在MyView中你会有这样的东西.当然,您可以将它们放在ContentControls视图中的任何位置.

<StackPanel>
    <ContentControl x:Name="FirstSubViewModel" />
    <ContentControl x:Name="SecondSubViewModel" />
    <ContentControl x:Name="ThirdSubViewModel" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

另一个常见用途AllActive是当你有一个项目列表.但这些项目非常复杂,需要保证自己的View/ViewModel需要激活.在这种情况下,您不必具有视图的单独属性,因为您只需将x:Name列表控件设置为Items.