Apertura di una nuova finestra da ViewModel utilizzando Castle Windsor

1

Ho seguito il breve tutorial sull'utilizzo di Castle Windsor in MVVM WPF: TUTORIAL

Ho impostato tutto (come per le basi) ma sono arrivato al punto di creare una nuova finestra dopo un clic del pulsante. Questo è dove mi sono perso.

In sostanza, da quello che ho imparato, il contenitore NON dovrebbe essere referenziato più di una volta.

public class Shell : IShell
{
    public MainWindow window { get; set; }

    public void Run()
    {
        window.Show();
    }
}

public partial class App : Application
{
    IWindsorContainer container;
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        container = new WindsorContainer();
        container.Install(FromAssembly.This());

        // Resolve Shell to start application
        var start = container.Resolve<IShell>();
        start.Run();
        container.Release(start);
    }
}

L'ho già fatto riferimento qui, all'avvio dell'applicazione, in modo che la mia MainWindow sia visualizzata e tutto sia correttamente collegato a questo.

Quindi, la mia domanda è:

How do I manage creation and showing of a new window, when this process i going to be initialized in a ViewModel?

L'unica cosa che sono riuscito a fare è stata:

  1. Includi tutte le mie viste in quella shell descritta sopra, scrivi i metodi lì per la creazione di ogni finestra (proprio come funziona Run ())

  2. Crea un ContainerManager? che sottoscrive gli eventi e inserisce il codice attualmente presente nella mia classe App ed estendilo in modo che risolva la shell del contenitore ogni volta che ho bisogno di creare una nuova finestra e chiamare un metodo appropriato per visualizzare una finestra.

La cosa sulla soluzione di cui sopra, è che mi sembra molto sbagliato per me e mi sembra di infrangere molti principi qui.

    
posta Kamil Solecki 09.12.2016 - 10:32
fonte

0 risposte

Leggi altre domande sui tag