2011-08-16 8 views
4

私はちょうどmvvmlightに渡ってプロジェクトを切り替えて、物事をやろうとしているのURLパラメータを拾うの「適切な方法は、」私はシンプルを持っているものです項目がリストボックスで選択されているリストボックスmvvmlight - 「正しい方法」</p> <p>ビューモデル

を持つアプリは、その後、私は

このRelayCommandはINavigationServiceのコール(http://geekswithblogs.net/lbugnion/archive/の原因となるRelayCommandをフックアップしました「/DetailPage.xaml?DetailId=12」のようなURLにナビゲートする2011/01/06/navigation-in-a-wp7-application-with-mvvm-light.aspx)

DetailPage.xamlはその後...私は少しわからないよこれはどこで...ロードされDetailPageは12のDetailIdでDetailViewまで夢中べきか

  • Xamlでこれを行うには、ViewLocatorのプロパティを使用する必要がありますか?
  • NavigatedToメソッドでこれを行う必要がありますか?

完全なサンプルに私を指すこと自由に感じてください - 確かこれは前(百)千回行われているが、すべてのブログやチュートリアルは、メッセージングに代わりに焦点を当て(この最後の些細なディテールを飛ばしているように見えますナビゲーションサービスのioc上)

ありがとう!

答えて

5

URLパラメータを取得できる場所は、ビュー内です。だからあなたのビューはおそらくそれに依存しているので、OnNavigatedToメソッドで取得する必要があります。

次に、あなたが私に尋ねると高価なメッセージングを使用するか、自分が想定しているビューモデルであるdatacontextを参照して、そのメソッドを実行するかのいずれかでviewmodelに渡す必要があります。

NavigationContextの特別な拡張機能を使用して簡単にできます。

namespace System.Windows.Navigation 
{ 
    public static class NavigationExtensions 
    { 
     public static int? TryGetKey(this NavigationContext source, string key) 
     { 
      if (source.QueryString.ContainsKey(key)) 
      { 
       string value = source.QueryString[key]; 

       int result = 0; 
       if (int.TryParse(value, out result)) 
       { 
        return result; 
       } 
      } 

      return null; 
     } 

     public static string TryGetStringKey(this NavigationContext source, string key) 
     { 
      if (source.QueryString.ContainsKey(key)) 
      { 
       return source.QueryString[key]; 
      } 

      return null; 
     } 
    } 
} 
+0

いいね!とても便利な。 ListBoxでViewModelを使用している場合、ListBox.SelectedItemを抜き出してViewModelにキャストし、PhoneApplicationService.Current.State ["some key"]に埋め込み、それを抜き取ってください送信先ビューのOnNavigatedToに出力します。そうすれば、私はクエストストリングを扱うことはできませんが、どちらのアプローチもうまくいくはずです。 – Bil

+1

QueryStringを使用する方が安価で、途中でもっと簡単に削除することができます。 –

+0

最後に、私はちょうどこれを受け入れました。まだもっと控えめな方法があることを願っています。現在、私はそれのために働くかもしれない継承ツリーに取り組んでいます。 – Stuart

0

新しいWindowsPhoneDataBoundアプリケーションを作成するには、ビュー間のナビゲーションの処理方法の例があります。基本的には、ビュー内のナビゲーション部分を処理してから、ビューのDataContextアラインメントをクエリ文字列に設定します。 ViewModelはナビゲーション(UIレベルでIMOを処理する必要がある)について何も知る必要がないので、MVVMパターンでうまくいくと思います。

関連する問題