2010-10-28 37 views
3

我是Silverlight的新手,我無法理解如何正確導航頁面,尤其是當我需要傳遞數據時。如何使用MVVM在Silverlight 4.0中執行導航?

經典示例:我在一個頁面上有一個人員列表,當我點擊datagrid中的某個人時,我想要轉到詳細信息頁面並加載該數據。我需要通過PersonId。更重要的是,我需要知道如何從ViewModel做到這一點。

很容易從ViewModel上的datagrid發出一個命令,並且viewmodel上的SelectedItem也被綁定並跟蹤,但那又如何?我如何到達下一頁?我不能爲我的生活找出這一個。這似乎應該是非常簡單的,但迄今爲止它一直非常簡單。

+0

您是否已經查看了Silverlight中的導航功能(http://msdn.microsoft.com/zh-cn/library/cc838245(VS.95).aspx)您僅使用MVVM還是正在使用像棱鏡一樣呢? – Murven 2010-10-29 01:04:28

+0

只能使用MVVM Murven。我或多或少地想到了這一點。看來我要麼必須從視圖注入NavigationService到ViewModel中,要麼我必須從ViewModel中將事件觸發回視圖,以便觸發對NavigationService的調用。但無論哪種方式它的工作。 – 2010-10-29 12:02:29

回答

0

要做的最基本的事情就是改變Application.Current.RootVisual的設置,並設置合適的DataContext。不過,有一些可以爲你設置好的包裝紙要好得多。例如,在您定製的視圖中,您正在瀏覽的視圖的構造函數可以以更好的方式爲您處理某些邏輯。如果您使用Prism,那麼您最終會討論修改shell或shell中的容器。

+0

實際上,一旦它被設置,Application.Current.RootVisual就不能被改變,但是你想傳輸的想法是完全正確的。 – Murven 2010-10-29 01:06:32

0

在SelectedItemChanged中,您可以使用另一個頁面中需要的對象來設置ViewModel屬性「SelectedItem」。你ViewModel需要是一個Singleton。在另一個頁面中,您需要將DataContext設置爲ViewModel,現在您可以將SelectedItem綁定到所需的控件。

我唯一不喜歡的是,你仍然需要去啓動頁面後面的代碼,從DataGrid中獲取SelectedItem並使用此值設置ViewModel。