Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can anybody provide any simple working example of the Conductor<T>.Collection.AllActive usage?

It's a bit strange, but I really can't find a working example anywhere.

By the way, I'm using a ViewModel-first approach (in WPF) if this is important.

Thank you in advance.

like image 236
EngineerSpock Avatar asked Dec 16 '13 09:12

EngineerSpock


1 Answers

If you have a look at the discussion here you will see that the intent of AllActive is to compose several Views/ViewModels into a containing ViewModel. Judging from your previous comments it seems as if this is what you were expecting but I figured I'd at least reference it here.

You then mention activating 3 different ViewModels at different regions of the View. The way I've handled this in the past is to have separate properties for binding/referencing the ViewModels in the View, and then just adding all of them to Items to get the Conductor behavior.

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; }
}

And in MyView you would have something like this. Of course you could put these ContentControls wherever you want to in the view.

<StackPanel>
    <ContentControl x:Name="FirstSubViewModel" />
    <ContentControl x:Name="SecondSubViewModel" />
    <ContentControl x:Name="ThirdSubViewModel" />
</StackPanel>

Another common use for AllActive is when you have a list of items. But the items are complex enough to warrant having their own View/ViewModels that require activation. In that case you would not have to have separate properties for the views as you would just set the x:Name of the list control to Items.

like image 83
Peter Karlsson Avatar answered Oct 16 '22 17:10

Peter Karlsson