2010-10-16 4 views
3

Voyez-vous une meilleure façon d'appeler/de construire une boîte de dialogue à partir d'un Controller/ViewModel en renvoyant des données et de définir DocumentViewModel en tant que DataContext du Dialogue?Préparez une liaison Dialog ViewModel, appelez Dialog et renvoyez-en des données dans MVVM

Le problème est que je ne peux pas utiliser Voir la première approche dans le DocumentDetailWindow et son appartenance UserControl parce que je ne peux pas définir le modèle à la propriété DocumentViewModel`s document dans XAML!

Comment résoudriez-vous ce scénario? Rendez la boîte de dialogue correctement lisible, appelez la boîte de dialogue et renvoyez les données à LessonPlannerController afin que le nouveau document puisse être enregistré dans la base de données et ajouté à ObservableCollection des documents afin que l'interface graphique soit actualisée avec un document supplémentaire.

LessonPlannerController/ViewModel:

private void OnAddDocument() 
    { 
      DocumentDetailWindowaddDocumentWindow = new DocumentDetailWindow(); 
      DocumentViewModeldocumentViewModel = new DocumentViewModel(); 

      documentViewModel.Document = new Document(); 
      documentViewModel.Repository = new LessonPlannerRepository(); 
      documentViewModel.SaveDocumentDelegate += new Action<Document>(OnSaveDocument); 

      addDocumentWindow.DataContext = documentViewModel;   
      addDocumentWindow.ShowDialog(); 
} 

MISE À JOUR:

J'ai même pensé à ne pas faire cette => documentViewModel.Document = new document(); parce pourquoi ai-je besoin d'un modèle dans un ViewModel quand je peux le faire:

EN REALITE ces propriétés ont une NotifyPropertyChange ... chaîne publique DocumentName {get; set;} chaîne publique Mots-clés {get; set;}

Puis je pourrais créer une instance de Document avec les propriétés ci-dessus dans DocumentViewModel, quand la commande Enregistrer est exécutée, puis passer le Document via Callback à LessonPlannerControl etc ... il semble que View first is ne fonctionne pas lorsque vous devez inscrire votre événement à une méthode. Seul ViewModel fonctionne d'abord.

Qu'en pensez-vous? Ne devrais-je pas utiliser ocumentViewModel.Document = new Document();

et de créer ces 2 propriétés dans DocumentViewModel. Hm ... mais pourquoi recréer si elles sont déjà dans le Modèle de Document? ...

+0

+1 pour votre mini-dialogue avec vous-même :) – jlafay

Répondre