2009-09-23 6 views
9

Con MVVM e WPF quale sarebbe un modo buono/diretto per gestire l'apertura e la chiusura di nuove finestre e finestre di dialogo? L'apertura e la chiusura dovrebbero essere guidate dal ViewModel giusto? Ma il ViewModel non dovrebbe sapere della vista ...Come gestisco l'apertura e la chiusura di nuove finestre con MVVM?

+0

ho risposto a una domanda molto simile in [questo post] (http://stackoverflow.com/a/15512972/385995). –

risposta

6

Di solito uso le interfacce per questo. Ad esempio, se voglio modificare un record in una finestra separata, ho un'interfaccia IEditingProvider <TViewModel>, che posso implementare da qualche altra parte e quindi passare un riferimento all'interfaccia al costruttore del mio ViewModel. L'EditingProvider potrebbe solo fare qualcosa di simile:

class MyRecordEditingProvider: IEditingProvider<MyRecordViewModel> 
{ 
    // Implementation of generic interface method 
    public void Edit(MyRecordViewModel model) { 
     EditWindow edit = new EditWindow(); 
     edit.DataContext = model; 
     edit.ShowDialog(); 
    } 
} 
+0

In che modo è possibile mantenere gli EditingProvider a disposizione (una certa parte) dell'applicazione e come recuperare l'istanza corretta che verrà passata al costruttore di ViewModel? Suppongo che non sia tutto cablato ma disaccoppiato? – bitbonk

+0

Sì, è disaccoppiato. In realtà sto usando un Dependency Injection Framework (Composite Application Block di Microsoft) per mappare le interfacce generiche alle implementazioni. Attualmente lo sto facendo in codice, ma il contenitore Unity può anche essere configurato utilizzando un file di configurazione. – Botz3000

+0

Avete una soluzione MVVM-friendly per impostare la proprietà 'Owner' di EditWindow prima di chiamare ShowDialog? Se il proprietario non è impostato (per la finestra principale, ad esempio), la finestra di dialogo modale può andare dietro la finestra principale che è piuttosto strana e confusa dal punto di vista dell'utente. – Slauma

Problemi correlati