Acessando o contêiner de unidade na classe de modelo de exibição
Eu tenho um shell que se parece com a barra de ferramentas e define minha região principal (um painel de quebra). O que eu preciso fazer é poder adicionar widgets ao shell e quando um widget é clicado, uma nova janela (visualização) é aberta. Abaixo está o que eu tenho até agora:
Criei uma classe de módulo que adiciona uma visão à região principal:
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);
}
}
Aqui está o conteúdo do MyModuleView:
<Grid>
<Grid.DataContext>
<vm:MyModuleVM/>
</Grid.DataContext>
<Button Content="My Module" Foreground="White" FontWeight="Bold" Command="{Binding Path=LaunchCommand}">
</Button>
</Grid>
O modelo de exibição, 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;
}
}
Então, meu plano era o seguinte:
Crie a classe que implementa IModule (MyModule) e faça com que ela carregue uma visualização (MyModuleView) no shell quando inicializada
Crie um modelo de exibição para o módulo (MyModuleVM) e configure-o como o DataContext da exibição exibida no shell
MyModuleVM contém um comando ao qual um botão no MyModuleView se liga. Quando o botão é clicado, o comando é acionado
Agora, aqui é onde estou preso. Usando um WindowRegionAdapter (um adaptador que ajuda a criar exibições em janelas separadas), eu queria criar e exibir uma nova exibição. Como visto em MyModuleVM, o LaunchTestView precisa acessar o contêiner para adicionar a exibição a uma região. Como devo chegar ao contêiner?
Além da minha pergunta específica sobre como acessar o contêiner, como está minha estratégia geral de adicionar "widgets" a um shell da barra de ferramentas e iniciar visualizações quando eles são clicados? Estou completamente fora dos trilhos aqui quando se trata de MVVM com Prism?
Obrigado rapazes.