2013-06-21 108 views
-1

我在這裏有一個屬性,顯示從組合框中選擇的消息。在我的InitializeMessageFields方法中,我根據選定的項加載一個數據網格。 可以說我在組合框中有不同的項目。我想要做的是在加載網格之前顯示(在某個對話框中)所選項目,以通知用戶哪些網格數據屬於哪個項目。 私有字符串_selectedMessageType;顯示對話框MVVM模式

public string SelectedMessageType 
    { 
     set 
     { 
      if (_selectedMessageType == value) return; 
      this._selectedMessageType = value; 
      InitializeMessageFields(); 
      this.NotifyPropertyChanged("IsMessageTypeSelected"); 
     } 
     get 
     { 
      MessageBox.Show("Loading ",_selectedMessageType); 
      return this._selectedMessageType; 
     } 

    } 

我該怎麼做?

+0

[MVVM中的對話框](http://www.codeproject.com/Articles/70223/Using-a-Service-Locator-to-Work-with-MessageBoxes) – Viv

+3

稍微切題,但我會考慮不好的做法是讓屬性設置者打開一個對話框。 –

+0

爲什麼我的問題投下來了?如果你在投票時發表評論,它會很好,它會幫助用戶學習同樣的錯誤? –

回答

0

根據您希望如何打開對話框,您可以在視圖模型中引發事件,使用Viv建議的服務定位器模式,或使用MVVMLite's Messenger(只是幾個想法)。 你可以直接打開你的視圖模型的對話框,但這是不建議,因爲它阻止你單元測試你的視圖模型或重新使用視圖模型(可能作爲portable class library)。

這裏是一篇文章和msdn的一些示例代碼,展示瞭如何打開一個wpf對話框。您可以將ViewModel傳遞給對話框構造函數並設置窗口的數據上下文。

http://msdn.microsoft.com/en-us/library/aa969773.aspx#Custom_Dialog_Boxes

// Instantiate the dialog box 
MarginsDialogBox dlg = new MarginsDialogBox(); 

// Configure the dialog box 
dlg.Owner = this; 

// Open the dialog box modally 
dlg.ShowDialog(); 
0

顯示直接在VM對話框使測試困難。而是通過負責顯示消息的構造函數將服務作爲Dependency傳遞。通過一個接口實現它,所以你可以模擬它進行測試。

或者使用棱鏡中的事件聚合器。這將是我的首選方法。

如果您想直接在vm中顯示懶惰,至少需要添加一個布爾屬性來抑制測試。