Accéder à l'unité de conteneur en vue de la classe du modèle

J'ai une coque qui ressemble à de la barre d'outils et qui définit ma région principale (une enveloppe). Ce dont j'ai besoin pour faire est d'être en mesure d'ajouter des widgets à la coquille et lorsqu'un widget est cliqué, une nouvelle fenêtre (vue) est ouvert. Voici ce que j'ai à ce jour:

J'ai créé un module de classe qui ajoute une vue de la principale région:

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

Voici le contenu de MyModuleView:

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

Le modèle de vue, 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;
    }
  }

Donc mon plan était le suivant:

  • Créer la classe qui implémente
    IModule (MyModule) et de charger une
    affichage (MyModuleView) dans l'interpréteur de commandes
    lorsque l'initialisation est
  • Créer un modèle d'affichage pour le module
    (MyModuleVM) et la définir comme la
    DataContext de la vue affichée dans
    la coquille
  • MyModuleVM contient une commande d'un
    bouton MyModuleView lie.
    Lorsque le bouton est cliqué sur le
    la commande est déclenchée
  • Maintenant, c'est là que je suis bloqué. À l'aide de
    un WindowRegionAdapter (un adaptateur
    qui permet de créer des vues en
    séparée de windows) j'ai voulu créer
    et l'affichage d'un nouveau point de vue. Comme on le voit dans
    MyModuleVM, LaunchTestView besoins
    l'accès au conteneur afin de
    ajouter la vue à une région. Comment suis-je
    censé être le contenant?

En plus de ma question spécifique sur l'accès au conteneur, quelle est ma stratégie globale de l'ajout de "widgets" à une barre d'outils shell et le lancement de
points de vue quand on clique dessus? Suis-je comlpetely hors piste ici, quand il s'agit de MVVM avec Prism?

Merci les gars.

OriginalL'auteur Flack | 2010-09-23