2013-01-10 71 views
2

我想將檢查標識(checkedParcels)的列表傳遞到另一個頁面以相應地顯示詳細信息列表。如何訪問viewmodel中的查詢字符串值?

對於這第一ViewModel我已經執行命令,我可以導航到另一個頁面的執行。下面是該代碼:

Uri uri = new Uri("/UnitListForParcelPage?checkedParcel=" + checkedParcels,UriKind.Relative); 
navigationService.NavigateTo(uri); 

我能夠瀏覽到這裏第二頁在瀏覽器中顯示的地址,因爲它:

http://example.com/PropMgmtTestPage.aspx#/UnitListForParcelPage?checkedParcel=System.Linq.Enumerable+WhereEnumerableIterator%601%5BPropMgmt.ParcelServiceRef.Parcel%5D

我的問題是我使用的視圖模型來在這個頁面上執行操作,但我無法找到任何方法來訪問通過查詢字符串傳遞的值。

更新: 在頁面代碼隱藏我已經加入這個代碼:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    string PSTR = NavigationContext.QueryString["checkedParcel"]; 
    MessageBox.Show(PSTR); 
} 

的MessageBox正顯示出正確的值,現在我只是想結合,爲視圖模型屬性

我已經使用這個通過綁定viewmodel來查看:

<navigation:Page.Resources> 
    <helpers:SimpleViewModelLocator ViewModelKey="UnitTransFormViewModel" x:Key="viewModelLocator"/> 
</navigation:Page.Resources> 
<navigation:Page.DataContext> 
    <Binding Source="{StaticResource viewModelLocator}" Path="ViewModel"/> 
</navigation:Page.DataContext> 

回答

2

另一種方式使公共財產,並與checkedParcel的值賦給它,現在你可以使用它在視圖模型乾杯:)

UPDATE:

只是做一個

public static string checkedParcel = string.Empty; 

in App.Xaml.cs

當您撥打

App.checkedParcel = checkedParcels; 
this.navigationService.NavigateTo(uri); 

在此之前,您需要將值賦予App.checkedParcel = checkedParcels;

,並在導航中頁面馬託

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    string PSTR = App.checkedParcel; 
    MessageBox.Show(PSTR); 
} 

希望你能理解。您可以通過相應地進行屬性和設置來實現此目的。

+0

我有更新我的問題 –

+0

我也更新我的答案。請看看它。 – ovais

+0

謝謝..我一直在尋找它... ... :) –

1

您可以使用廣播服務(如Messenge如果您使用的是MVVM Light)發送「更改視圖」通知以及您的參數。

然後,您可以輕鬆地查看反應(導航)和ViewModel獲取其參數。

+0

我有更新我的問題 –