Wenn Sie einen Blick auf die Diskussion here haben, werden Sie sehen, dass die Absicht von AllActive darin besteht, mehrere Views/ViewModels in ein enthaltendes ViewModel zu schreiben. Nach Ihren früheren Kommentaren zu urteilen, scheint es, als ob Sie das erwartet hätten, aber ich dachte mir, ich würde es hier zumindest erwähnen.
Dann erwähnen Sie die Aktivierung von 3 verschiedenen ViewModels in verschiedenen Bereichen der Ansicht. Die Art und Weise, wie ich das in der Vergangenheit gehandhabt habe, besteht in separaten Eigenschaften für das Binden/Referenzieren der ViewModels in der Ansicht und das anschließende Hinzufügen aller Elemente zu Items, um das Conductor-Verhalten zu erhalten.
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; }
}
Und in MyView würden Sie so etwas haben. Natürlich können Sie diese ContentControls
wo immer Sie möchten in der Ansicht setzen.
Eine andere häufige Verwendung für AllActive
ist, wenn Sie eine Liste von Elementen haben. Aber die Elemente sind komplex genug, um ihre eigenen View/ViewModels zu rechtfertigen, die aktiviert werden müssen. In diesem Fall müssten Sie keine separaten Eigenschaften für die Ansichten haben, da Sie einfach x:Name
des Listensteuerelements auf Items
setzen würden.
Was Sie davon erreichen wollen –
Wir wollen drei Ansichten mit ViewModels in einen "Container" laden. – EngineerSpock
Antwort unten funktioniert für Sie? –