1

Template10 では従来のナビゲーションを使用できないようです。Navigation failed エラーが常に発生します。Template10 では、以前のようにコード ビハインド ナビゲーションではなく、'XAML ビヘイビア スタイル' ナビゲーションを使用する必要がありますか?

内部例外もキャプチャしています。これらは、そこに表示されるエラーです。

値の解析中に予期しない文字が検出されました: 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;
        }
4

2 に答える 2

2

基本的なデモを作成し、問題を再現しました。テンプレート 10 のソース コードを調べたところ、テンプレート 10 がフレームにイベントを追加していることがわかりました。以下のようにナビゲートします。

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);
于 2016-06-24T01:31:07.230 に答える
0

MVVM プラクティスを使用しており、問題のページでビューモデルをデータ コンテキスト (View-First) に設定しているという前提があります。そのビューモデルは、デフォルトで NavigationService プロパティを持つ ViewModelBase を継承します。それ以外の場合は、INavigable を継承して独自のビューモデルを構築し、INavigable インターフェイスで「必要な」アイテムをセットアップします。

これはまた、ビューからの関心の分離を導入し、ビューモデルでの「クリック、選択など」の処理と「表示」のみを担当します (ビュー関連でない限り)。

x:Bindこれにより、定義された型または遅延バインディングによってプロパティをバインドすることも必要になることに注意してください。"{Binding SomeProperty}"

于 2016-06-23T18:20:44.940 に答える