2011-04-06 68 views
2

我試圖讓MVVMLight在Windows Phone 7上工作,並且遇到了一個小問題,讓我的腦袋圍繞這個範例。Windows Phone 7:MVVMLight和Messenger

我認爲應該遵循的場景是: 1)當主視圖模型加載時,通過MVVM Light Messenger發送一條消息來檢查數據庫的存在性 2)收到消息視圖模型,如果沒有數據庫,則通過信使將消息發送回視圖以顯示安裝視圖(導航到它) 3.)安裝程序視圖顯示爲第一視圖

問題似乎是事件被調用的順序。該視圖成功檢查數據庫的存在併發送消息,但視圖模型尚未初始化(消息發送時構造函數中的斷點未命中),因此表單未顯示。我是以正確的方式處理這個問題,還是應該檢查View中是否存在數據庫?

回答

4

Messenger只能將消息發送給內存中存在的對象(注意,我正在考慮添加一些「離線消息傳遞」解決方案,但它實際上只是一個願景,甚至不是藍圖)。在MVVM Light中,虛擬機連接到XAML中的視圖的方式中,虛擬機將很早(只要InitializeComponent在後面的代碼中被擊中)帶來生命。如果您需要先創建VM,則可以在ViewModelLocator中進行創建。我將在我的MIX11會議(Deep Dive MVVM)上展示它,以便在視頻發佈時進行檢查(我會在我的博客http://blog.galasoft.ch上提及它)。

如果您未使用MVVM Light綁定視圖和虛擬機的方式,並且虛擬機尚不存在於內存中,則有一種方法是稍後「緩存」該消息。創建一個僅用於接收消息並存儲它的輕量級對象。然後,當VM創建時,檢索該消息。這是一個消息隊列,如果你想。

我希望這會有所幫助, 洛朗

+0

我發現他們更早地創建VM作爲洛朗提到的是使用不同的contstructor註冊VM時:SimpleIoc.Default.Register (真)真正的標誌將它設置爲立即初始化。 – ferics2 2012-08-14 17:54:46