我是 xamarin 形式的棱镜新手。为了使用 xamarin 实现 prism,我安装了三个软件包:
- 棱镜芯
- Prism.Forms
- 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)