1

我是 xamarin 形式的棱镜新手。为了使用 xamarin 实现 prism,我安装了三个软件包:

  1. 棱镜芯
  2. Prism.Forms
  3. Prism.Unity.Forms

并像这样从 PrismApplication 继承 App:

  public partial class App : PrismApplication { }

我想从文件后面的代码中将 View 与 ViewModel 绑定,如下所示:

    this.BindingContext=ViewModelLocator.ViewModelName

为此,我找到了这段代码。此代码在 App.xaml.cs 中:

protected override void ConfigureViewModelLocator()
{
    base.ConfigureViewModelLocator();
    BindViewModelToView<LoginRegisterViewModel, MainPage>();
}
public void BindViewModelToView<TViewModel, TView>()
{
    ViewModelLocationProvider.Register(typeof(TView).ToString(), () => Container.Resolve<TViewModel>());
}

这是我的 ViewModel 代码:

public class LoginRegisterViewModel : BindableBase
{
    #region Private variables
    private readonly IPageDialogService _diglogService;
    private readonly INavigationService _navigationService;
    public  Action Test { get; set; }
    #endregion

    #region Constructor
    public LoginRegisterViewModel(IPageDialogService diglogService, INavigationService navigationService)
    {
        _diglogService = diglogService;
         _navigationService = navigationService;

    }
    #endregion
}

当我删除它时它工作正常INavigationService

但它显示错误:

未处理的异常:

Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "DSMobile.ViewModels.LoginRegisterViewModel", name = "(none)".

Exception occurred while: while resolving.

Exception is: InvalidOperationException - The current type, Prism.Navigation.INavigationService, is an interface and cannot be constructed. Are you missing a type mapping?

在异常发生时,容器是:

Resolving DSMobile.ViewModels.LoginRegisterViewModel,(none)    

Resolving parameter "navigationService" of constructor DSMobile.ViewModels.LoginRegisterViewModel(Prism.Services.IPageDialogService diglogService, Prism.Navigation.INavigationService navigationService)

Resolving Prism.Navigation.INavigationService,(none)
4

1 回答 1

0

我知道这是在提出问题很久之后,但我通过手动将 INavigationService 映射到 PageNavigationService 解决了这个问题,就像这样

container.Register<INavigationService, PageNavigationService>();

我希望这对遇到此问题的其他人有所帮助。

于 2018-08-06T18:15:30.550 回答