3

checkedParcelsチェックされたID( )のリストを別のページに渡して、それに応じて詳細のリストを表示したいと思います。

このために、最初のViewModelで、別のページに移動できる実行コマンドを実装しました。そのコードは次のとおりです。

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

ここで2番目のページに移動できます。ブラウザに表示されているアドレスです。

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

私の問題は、ViewModelを使用してこのページで操作を実行していますが、クエリ文字列を介して渡された値にアクセスするためのメソッドが見つかりません。

更新:ページコードの後ろにこのコードを追加しました:

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

MessageBoxは正しい値を表示していますこれをviewmodelプロパティにバインドしたいだけです

私はこのアプローチを使用して、viewmodelをviewにバインドしました。

<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>
4

2 に答える 2

2

別の方法パブリックプロパティを作成し、checkedParcelの値を割り当てて、ViewModelCheersで使用できるようにします:)

アップデート:

作るだけ

public static string checkedParcel = string.Empty; 

App.Xaml.csで

とあなたが呼び出すとき

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

その前に、App.checkedParcel=checkedParcelsに値を指定する必要があります。

ナビゲートされたページのmathod

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

あなたが理解することを願っています。プロパティを作成し、それに応じて設定することで、これを実現できます。

于 2013-01-10T13:44:52.520 に答える
1

ブロードキャストサービス(MVVM Lightを使用している場合はMessengerなど)を使用して、パラメーターとともに「ビューの変更」通知を送信できます。

そうすれば、Viewが簡単に反応し(Navigate)、ViewModelがそのパラメーターを取得するようになります。

于 2013-01-10T10:13:43.503 に答える