2013-01-07 37 views
8

,但我想我明白它的總體思路。我不明白的是,如果我想打開一個新窗口,但該窗口需要來自調用者的數據,那麼將數據傳送到新窗口的最佳做法是什麼?如果我將數據傳遞給構造函數,那意味着我需要在後面的代碼中將代碼傳遞給視圖模型。我無法使用消息傳遞,因爲它不是基本數據。提前致謝。最好的初步實踐來打開MVVM光在新窗口中我是相當新的MVVM和MVVM光參數

+0

對不起,從古老的過去,但什麼給你「我不能使用的消息意味着復活這一點,因爲它不是基本數據。」 ?我問這是因爲我正在學習MVVM,如果我處於你的情況,我會使用消息傳遞。 – lightxx

+0

對不起它已經太久了,我記得 –

回答

6

一個流行的選擇是使用將創建一個視圖/視圖模型,並顯示新視圖服務類。您的視圖模型構造函數和/或方法/屬性可以從調用者接收數據,然後在將視圖顯示在屏幕上之前將該視圖綁定到視圖模型。

這裏是一個非常非常簡單的實現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

會請你告訴我一個基本的例子嗎?我不確定我完全跟隨你。 –

+0

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

+0

geedubb僅適用於Silverlight的。我在Visual Studio中建立一個WPF應用程序2010 –