2016-06-22 7 views
1

Template10で従来のナビゲーションを使用できないようです。私はいつもNavigation失敗のエラーを受け取ります。 Template10では、以前のようにナビゲーションの背後にあるコードの代わりに 'XAMLビヘイビアスタイル'のナビゲーションを使用する必要がありますか?テンプレート10ナビゲーションが失敗する(Windows.UI.Xaml.Controls.Frame.NavigationFailedが処理されなかった)

私はまた、内部例外を捕捉していますし、これらは、私はそちらを参照してくださいエラーです:H:値を解析中

予期しない文字が発生しました。パス ''、行0、位置0。 パラメータはシリアル化可能でなければなりません。そうでない場合は、SessionStateを使用します。

(しかし、私のパラメータは単なる文字列である)

 private void lvResults_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     try 
     { 
      int intIndex = lvResults.SelectedIndex; 
      string strShowLink = g_ro.webPages.value[intIndex].displayUrl; 

      //This is what is returned in the line above and I want it as my passed parameter : 
      //https://www.grc.com/sn/sn-482.htm 

      //Open Detailspage sending parameter as a string 
      Frame.Navigate(typeof(BlankPage1),strShowLink); 
     } 

     catch (Exception ex) 
     { 
      //Error caught in app.xaml.cs (UnhandleExceptio) 
      //Windows.UI.Xaml.Controls.Frame.NavigationFailed was unhandled. 
      string strEx = ex.Message; 
     } 
+0

代わりのFrame.Navigateを()、(NavigationService.Navigateを試してみてください) – Stefan

+0

のNavigationServiceは私に移動オプションを与えるものではありません。私はテンプレート10が各ページに自動的にナビゲーションサービスを公開したと思った。最初にどこかでインスタンス化する必要がありますか? – Yosem

答えて

1

私は基本的なデモを作成し、問題を再現しました。私は、テンプレート10のソースコードに見て、テンプレート10は以下のようにframe.Navigatingにイベントを追加したことがわかった:だからそれはナビゲートするときに、あなたのパラメータをデシリアライズしようとします

frame.Navigating += (s, e) => FacadeNavigatingCancelEventHandler(s, e); 
private async void FacadeNavigatingCancelEventHandler(object sender, NavigatingCancelEventArgs e) 
{ 
     ... 
    object parameter = null; 
    try 
    { 
     parameter = SerializationService.Deserialize(e.Parameter?.ToString()); 
    } 
    catch (Exception ex) 
    { 
     throw new Exception("Your parameter must be serializable. If it isn't, then use SessionState.", ex); 
    } 
    ... 
} 

。次のようにパラメータをシリアル化する必要があります。

using Template10.Services.SerializationService; 
... 
string param = @"https://www.grc.com/sn/sn-482.htm"; 
string str=SerializationService.Json.Serialize(param); 
Frame.Navigate(typeof(OtherPage), str); 

エラーがなくなります。しかし、あなたは単純にコードビハインドに移動したい場合、あなたはまた、以下のようなのNavigationServiceを使用することができます。

string param = @"https://www.grc.com/sn/sn-482.htm"; 
var NavService = NavigationService.GetForFrame(Frame); 
NavService.Navigate(typeof(OtherPage), param); 
+0

ありがとうございました。私は行方不明でした "var NavService = NavigationService.GetForFrame(Frame);"今私はコードbeindを介して私のナビゲーションを行うことができます – Yosem

0

あなたはMVVMのプラクティスを使用し、問題のページにDataContextの(ビュー・ファースト)に設定するのviewmodelを持っている前提があります。 ViewModelはViewModelBaseを継承しますが、実際にはNavigationServiceプロパティがデフォルトで設定されています。それ以外の場合は、INavigableを継承して独自のビューモデルを構築し、INavigableインターフェイスによって「必須」である項目を設定します。

これはまた、唯一のviewmodel上及び処理「のクリックを、選択、など」(それはビュー関連のある場合を除き)

に入れたままにして「表示」やっていないために責任があるとビューから懸念の分離を紹介しますこれは、定義されたタイプx:Bindまたは遅いバインドによってプロパティをバインドすることにもつながることに注意してください。"{Binding SomeProperty}"

関連する問題