【问题标题】:INavigationService ImplementationINavigationService 实现
【发布时间】:2016-08-20 23:55:25
【问题描述】:

我正在自学 Prism/Xamarin Forms,但遇到了 Prism 导航系统的问题。

我在 app.cs 中注册了两个视图(MainPage 和 FirstPage)

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

当我导航到 MainPage 时,它​​工作正常:

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

但是,当我导航到 FirstPage 时,应用程序会出现“无资源”错误。

View 和关联的 ViewModel 的编码类似:

<?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";
        }
    }
}

谁能看出我哪里出错了?

【问题讨论】:

  • 也许参数为空?导航到 FirstPage 时尝试发送参数“title”。或从 FirstPageViewModel 中删除 INavigationAware

标签: c# xamarin navigation xamarin.forms prism


【解决方案1】:

您的首页的 xaml 中有一个放错位置的“>”。查看 x:Class 行的末尾,您会看到放错位置的“>”。摆脱它,它可能会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    相关资源
    最近更新 更多