2013-01-07 10 views
8

Jestem całkiem nowy dla światła mvvm i mvvm, ale myślę, że rozumiem ogólną ideę tego. Czego nie rozumiem, jeśli chcę otworzyć nowe okno, ale to okno potrzebuje danych od dzwoniącego, jaka jest najlepsza praktyka, aby przenieść te dane do nowego okna? Jeśli przekazuję dane do konstruktora, oznacza to, że potrzebuję kodu w kodzie, aby przekazać go do modelu widoku. Nie mogę używać wiadomości, ponieważ nie są to podstawowe dane. Z góry dziękuję.Najlepsze Pratice, aby otworzyć nowe okno w świetle MVVM z parametrami

+0

Niestety wskrzesić ten z zamierzchłej przeszłości, ale co to znaczy "nie mogę korzystać z wiadomości, ponieważ nie jest podstawowym dane." ? Pytam o to, ponieważ uczę się MVVM i gdybym był w twojej sytuacji, użyłbym Messaging. – lightxx

+0

Przykro mi, że było zbyt długo, bym pamiętał –

Odpowiedz

6

Popularnym wyborem jest użycie klasy usług, która utworzy widok/widok i wyświetli nowy widok. Twój konstruktor modelu widoku i/lub metoda/właściwość może odbierać dane od wywołującego, a następnie widok byłby związany z modelem podglądu przed wyświetleniem go na ekranie.

tutaj jest bardzo prosta implementacja 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

czy mógłbyś pokazać mi podstawowy przykład? Nie jestem pewien, czy podążam za tobą całkowicie. –

+0

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

+0

geedubb, który działa tylko dla silverlight. Buduję aplikację wpf na visual studio 2010. –

Powiązane problemy