2014-10-28 53 views
0

隨着我繼續適應wpf和mvvm的新世界,我發現自己遇到了另一個被證明有點麻煩的問題。將參數從一個視圖模型傳遞到另一個視圖模型wpf

在Windows窗體中,如果我需要一個新窗體來獲取參數,我只需將該窗體的構造函數所需的信息傳遞給我。由於Winforms基本上是模型背後的代碼,所以這不是問題。

我現在發現自己有一個MainWindow(由MainWindowViewModel控制)和一個Login(由LoginViewModel控制),它首先顯示爲一個對話框。我已經排序了缺少對話框結果的問題,並且可以在關閉登錄對話框後顯示主窗口。

登錄對話框在應用程序啓動時顯示並響應以下代碼;

dim dlg As New Login 

    If dlg.ShowDialog() = True Then 

    Else 
     Current.Shutdown(0) 
    End If 

和我使用用在登錄窗口的後面的代碼,以表示登錄對話框關閉時主窗口的護理以下;

Public Sub New 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 
    Application.Current.ShutdownMode =ShutdownMode.OnExplicitShutdown 
End Sub 

Protected Overrides Sub OnClosed(e As EventArgs) 
MyBase.OnClosed(e) 
Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose 
End Sub 

現在的主窗口已經知道它的DataContext的是MainWindoViewModel因爲我與混合設計時就設定了,讓我怎麼過,我想從LoginViewModel到MainWindowViewModel傳遞任何參數?

我可以閱讀c#,但如果可能的話會更喜歡vb。我知道這是我想要經常做的事情,所以如果有一種通用的方式來做到這一點,那麼這就是我想要去的方式。

由於

+0

通常情況下,您會使用某種消息傳遞系統在不相關的ViewModel之間傳遞數據,但是在您使用Login和Main ViewModels的情況下,直到登錄成功後纔會創建MainViewModel,並且通過它它在構造函數中需要的數據。如果你有興趣,我有一個例子[這裏](http://stackoverflow.com/a/12861797/302677)。 – Rachel 2014-10-28 15:34:08

回答

0

MVVM框架通常執行某種消息傳送系統的允許數據的ViewModels之間或有時視圖模型和視圖之間移動。

您可以看看在一些更流行的框架(如MvvmLight或MvvmCross)中處理消息處理的方式。它通常就像一個使用弱引用來防止緊耦合的事件,因此您可以註冊一種消息類型,然後從另一個視圖模型向任何註冊的偵聽器發佈消息。

因此,您或者需要實現自己的一種信使,或者現在可能是開始使用第三方框架的時候了,除非您有避免這種情況的具體原因。

相關問題