2013-01-07 11 views
8

Ich bin relativ neu zu MVVM und MVVM Licht, aber ich denke, ich verstehe die allgemeine Idee davon. Was ich nicht verstehe, ist, wenn ich ein neues Fenster öffnen möchte, aber dieses Fenster benötigt Daten vom Anrufer, was ist die beste Vorgehensweise, um diese Daten in das neue Fenster zu bekommen? Wenn ich die Daten an den Konstruktor übergebe, bedeutet das, dass ich Code im Code benötige, um ihn an das View-Modell zu übergeben. Ich kann keine Nachrichten verwenden, da es sich nicht um grundlegende Daten handelt. Danke im Voraus.Beste Praxis zum Öffnen eines neuen Fensters in MVVM Light mit Parametern

+0

Leider dies aus der antiken Vergangenheit wieder zu beleben, aber was du meint mit "I nicht-Funktion nutzen kann, weil es nicht basisch ist Daten." ? Ich frage das, weil ich MVVM lerne und wenn ich in Ihrer Situation wäre, würde ich Messaging verwenden. – lightxx

+0

Es tut mir leid, dass es zu lange für mich war, sich daran zu erinnern –

Antwort

6

Eine beliebte Wahl ist die Verwendung einer Serviceklasse, die ein Ansichts-/Ansichtsmodell erstellt und die neue Ansicht anzeigt. Ihr Ansichtsmodellkonstruktor und/oder die Methode/Eigenschaft könnte die Daten vom Aufrufer erhalten, und dann wäre die Ansicht an das Ansichtsmodell gebunden, bevor sie auf dem Bildschirm angezeigt wird.

hier ist eine sehr sehr einfache Implementierung eines DialogService:

public class DialogService : IDisposable 
{ 
    #region Member Variables 
    private static volatile DialogService instance; 
    private static object syncroot = new object(); 
    #endregion 

    #region Ctr 
    private DialogService() 
    { 

    } 
    #endregion 

    #region Public Methods 
    public void ShowDialog(object _callerContentOne, object _callerContentTwo) 
    { 
     MyDialogViewModel viewmodel = new MyDialogViewModel(_callerContentOne, _callerContentTwo); 
     MyDialogView view = new MyDialogView(); 
     view.DataContext = viewmodel; 

     view.ShowDialog(); 
    } 
    #endregion 

    #region Private Methods 

    #endregion 

    #region Properties 
    public DialogService Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       lock (syncroot) 
       { 
        if (instance == null) 
        { 
         instance = new DialogService(); 
        } 
       } 
      } 
      return instance; 
     } 
    } 
    #endregion 
} 
+0

Würden Sie mir bitte ein einfaches Beispiel zeigen? Ich bin mir nicht sicher, ob ich dir vollständig folge. –

+0

http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/ – geedubb

+0

Geedubb, das nur für Silverlight funktioniert. Ich baue eine WPF-Anwendung auf Visual Studio 2010. –