Auf den Einheitscontainer in der Ansichtsmodellklasse zugreifen

Ich habe eine Shell, die aussieht wie eine Symbolleiste und meine Hauptregion definiert (ein Umbruchfeld). Was ich tun muss, ist in der Lage zu sein, Widgets zur Shell hinzuzufügen und wenn ein Widget angeklickt wird, wird ein neues Fenster (Ansicht) geöffnet. Unten ist, was ich bisher habe:

Ich habe eine Modulklasse erstellt, die der Hauptregion eine Ansicht hinzufügt:

public class MyModule : IModule
{
  protected IUnityContainer Container { get; private set; }

  public MyModule(IUnityContainer container)
  {
    Container = container.CreateChildContainer();
  }

  public void Initialize()
  {
    var regionManager = Container.Resolve<IRegionManager>();
    MyModuleView myModuleView = new MyModuleView();
    regionManager.Regions["MainRegion"].Add(myModuleView);
  }
}

Hier ist der Inhalt von MyModuleView:

  <Grid>
    <Grid.DataContext>
      <vm:MyModuleVM/>
    </Grid.DataContext>
    <Button Content="My Module" Foreground="White" FontWeight="Bold" Command="{Binding Path=LaunchCommand}">
    </Button>
  </Grid>

Das Ansichtsmodell MyModuleVM:

  class MyModuleVM : ObservableObject
  {
    protected IUnityContainer Container { get; private set; }

    public MyModuleVM()
    {
    }

    RelayCommand _launchCommand;
    public ICommand LaunchCommand
    {
      get
      {
        if (_launchCommand == null)
        {
          _launchCommand = new RelayCommand(() => this.LaunchTestView(),
              () => this.CanLaunchTestView());
        }
        return _launchCommand;
      }
    }

    private void LaunchTestView()
    {
      TestView view = new TestView();
      view.Title = "Test View";
      var regionManager = Container.Resolve<IRegionManager>();
      regionManager.Regions["MyWindowRegion"].Add(view);
    }

    private bool CanLaunchTestView()
    {
        return true;
    }
  }

Also mein Plan war wie folgt:

Erstellen Sie die Klasse, die IModule (MyModule) implementiert, und laden Sie bei der Initialisierung eine Ansicht (MyModuleView) in die Shell.

Erstellen Sie ein Ansichtsmodell für das Modul (MyModuleVM) und legen Sie es als Datenkontext der in der Shell angezeigten Ansicht fest.

MyModuleVM enthält einen Befehl, an den eine Schaltfläche in MyModuleView gebunden ist. Beim Anklicken der Schaltfläche wird der Befehl ausgelöst

Now, hier stecke ich fest. Mit einem WindowRegionAdapter (einem Adapter, mit dem Ansichten in separaten Fenstern erstellt werden können) wollte ich eine neue Ansicht erstellen und anzeigen. In MyModuleVM benötigt LaunchTestView Zugriff auf den Container, um die Ansicht zu einer Region hinzuzufügen. Wie soll ich zum Container kommen?

Neben meiner spezifischen Frage zum Zugriff auf den Container, wie ist meine allgemeine Strategie, einer Symbolleisten-Shell "Widgets" hinzuzufügen und Ansichten zu starten, wenn sie angeklickt werden? Bin ich hier völlig außer Kontrolle, wenn es um MVVM mit Prism geht?

Danke Leute

Antworten auf die Frage(2)

Ihre Antwort auf die Frage