2016-08-20 14 views
0

私はPrism/Xamarin Formsを自分自身で教えており、Prismのナビゲーションシステムで問題を起こしました。INavigationServiceの実装

は、私は2つのビュー(メインページやFIRSTPAGE)はapp.csに登録した

protected override void RegisterTypes() 
    { 
     Container.RegisterTypeForNavigation<MainPage>("MainPage"); 
     Container.RegisterTypeForNavigation<FirstPage>("FirstPage"); 
    } 

私はそれをメインページに移動し正常に動作します:

NavigationService.NavigateAsync("MainPage?title=MainPage"); 

をしかし、私はアプリをFIRSTPAGEに移動したときに「リソースなし」エラーでエラーが発生しました。

両方のビューと関連のviewmodelsも同様にコード化されている:私は間違っているつもりどこ

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
      prism:ViewModelLocator.AutowireViewModel="True" 
      x:Class="PrismDemo.Views.MainPage" 
      Title="MainPage"> 
    <StackLayout HorizontalOptions="Center" VerticalOptions="Center"> 
    <Label Text="{Binding Title}" /> 
    <Button Text="Navigate" Command="{Binding NavigateCommand}" /> 
    </StackLayout> 
</ContentPage> 

    <?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
      prism:ViewModelLocator.AutowireViewModel="True" 
      x:Class="PrismDemo.Views.FirstPage"> 
      Title="FirstPage"> 
    <StackLayout HorizontalOptions="Center" VerticalOptions="Center"> 
    <Label Text="{Binding Title}" /> 
    <Button Text="Back" Command="{Binding NavigateCommand}" /> 
    </StackLayout> 
</ContentPage> 

using Prism.Commands; 
using Prism.Mvvm; 
using Prism.Navigation; 
using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace PrismDemo.ViewModels 
{ 
    public class MainPageViewModel : BindableBase, INavigationAware 
    { 
     INavigationService _navigationService; 
     private string _title; 

     public string Title 
     { 
      get { return _title; } 
      set { SetProperty(ref _title, value); } 
     } 

     public DelegateCommand NavigateCommand { get; set; } 

     public MainPageViewModel(INavigationService navigationService) 
     { 
      _navigationService = navigationService; 
      NavigateCommand = new DelegateCommand(Navigate); 
     } 

     private void Navigate() 
     { 
      _navigationService.NavigateAsync("FirstPage"); 
     } 

     public void OnNavigatedFrom(NavigationParameters parameters) 
     { 

     } 

     public void OnNavigatedTo(NavigationParameters parameters) 
     { 
      if (parameters.ContainsKey("title")) 
       Title = (string)parameters["title"] + " and Prism"; 
     } 
    } 
} 

using Prism.Commands; 
using Prism.Mvvm; 
using Prism.Navigation; 
using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace PrismDemo.ViewModels 
{ 
    public class FirstPageViewModel : BindableBase, INavigationAware 
    { 
     INavigationService _navigationService; 
     private string _title; 

     public string Title 
     { 
      get { return _title; } 
      set { SetProperty(ref _title, value); } 
     } 

     public DelegateCommand NavigateCommand { get; set; } 

     public FirstPageViewModel(INavigationService navigationService) 
     { 
      _navigationService = navigationService; 
      NavigateCommand = new DelegateCommand(Navigate); 
     } 

     private void Navigate() 
     { 
      _navigationService.GoBackAsync(); 
     } 

     public void OnNavigatedFrom(NavigationParameters parameters) 
     { 

     } 

     public void OnNavigatedTo(NavigationParameters parameters) 
     { 
      if (parameters.ContainsKey("title")) 
       Title = (string)parameters["title"] + " and Prism"; 
     } 
    } 
} 

誰でも見ることができますか?

+0

パラメータがnullである可能性がありますか? FirstPageに移動するときにパラメータ "title"を送信しようとします。またはFirstPageViewModelからINavigationAwareを削除する – BraveHeart

答えて

0

最初のページのxamlに「>」が間違っています。 x:Class行の終わりを見て、間違った '>'が表示されます。それを取り除くとうまくいくかもしれません。