【发布时间】:2017-09-26 19:23:58
【问题描述】:
我在使用 MVVM Prism 时遇到了一个奇怪的异常。
这是我的代码:
LoginPageViewModel.cs 文件:
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using Prism.Services;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Xamarin.Forms;
using Prism.Unity;
using Microsoft.Practices.Unity;
using System.Threading.Tasks;
using MobileApp.Views;
namespace MobileApp.ViewModels
{
public class LoginPageViewModel : BindableBase, INavigationAware
{
.
.
.
private INavigationService _navigationService;
public LoginPageViewModel(INavigationService navigationService, ...)
{
.
.
.
_navigationService = navigationService;
}
}
}
我调用 LoginPage 的 App.xaml.cs 文件:
using Prism.Unity;
using MobileApp.Views;
using Xamarin.Forms;
using System;
using System.Globalization;
using Microsoft.Practices.Unity;
using Prism.Navigation;
using Microsoft.Practices.ServiceLocation;
using System.Diagnostics;
using MobileApp.ViewModels;
using System.Threading.Tasks;
namespace MobileApp
{
public partial class App : PrismApplication
{
public App(IPlatformInitializer initializer = null) : base(initializer)
{
}
protected override void OnInitialized()
{
NavigationService.NavigateAsync("LoginPage"); // ERROR here (Exception)
.
.
.
}
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<NavigationPage>();
Container.RegisterTypeForNavigation<LoginPage>();
.
.
.
}
}
}
在 NavigationService.NavigateAsync("LoginPage") 调用之后,我收到此错误:
System.InvalidOperationException:当前类型, Prism.Navigation.INavigationService,是接口,不能 建。您是否缺少类型映射?
有人知道怎么解决吗? 谢谢
【问题讨论】:
-
您是否缺少类型映射?我认为您缺少类型映射。您缺少类型映射,不是吗?您缺少类型映射。映射您的类型。
-
确保您使用 ViewModelLocator 设置 bindindCONtext,而不是尝试在代码隐藏中手动设置它。