请参阅位于单独的可移植类库项目中的ViewModels和Views
是否可以引用位于不同可移植类库中的Viewmodels以及位于不同可移植类库中的Views?请参阅位于单独的可移植类库项目中的ViewModels和Views
我的项目结构如下:
- SampleApp(便携式) - >查看 - > SecondPage.xaml
- SampleApp(Droid的)
- TestVM(类库项目) - >的ViewModels - > SecondPageViewModel
在App.cs,我注册页面如下 Container.RegisterTypeForNavigation<SecondPage, TestVM.ViewModels.SecondPageViewModel>();
它导航到第二页,但构造函数,INavigationAware接口方法没有被调用,mvvm绑定没有工作。
于是我想尝试的解决方案如下Getting Started with Prism’s new ViewModelLocator
解释我已重写ConfigureViewModelLocator
protected override void ConfigureViewModelLocator()
{
base.ConfigureViewModelLocator();
ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
{
var viewName = viewType.FullName;
var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
var viewModelName = String.Format(CultureInfo.InvariantCulture, "{0}ViewModel, {1}", viewName, viewAssemblyName);
return Type.GetType(viewModelName);
});
}
但是我怎么是指哪里我的ViewModels位于组装?
您当然可以覆盖ViewModel位置提供程序的默认配置。然而,更简单快捷的方法是使用View/ViewModel注册扩展。就像你可以这样做:
Container.RegisterTypeForNavigation<ViewA>()
你也可以这样做:
Container.RegisterTypeForNavigation<ViewA,ViewAViewModel>()
第二种方法就不再需要通过反射,可以提供稍好的性能来定位视图模型。因为您提供ViewModel,所以您无需担心ViewModel所在的组件,或者您遵循适当的约定。
在回答您的评论:
viewModelName:SampleApp.Views.SecondPageViewModel,SampleApp,版本= 1.0.0.0,文化=中立,公钥=空
适应var viewModelName = String.Format(CultureInfo.InvariantCulture, "{0}ViewModel, {1}", viewName, viewAssemblyName);
使其产生的实际鉴于型号名称:
TestVM.ViewModels.SecondPageViewModel, TestVM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
沿东西
var viewModelName = $"{viewName.Replace("SampleApp","TestVM")}ViewModel, {viewAssemblyName.Replace("SampleApp","TestVM").Replace("Views","ViewModels")}";
当试图获取视图模型类型时,什么是'viewName','viewAssemblyName'和'viewModelName'?视图模型组件的全称是什么? – Haukinger
@Haukinger ** viewName **:SampleApp.Views.SecondPage, ** viewAssemblyName **:SampleApp,Version = 1.0.0。0,Culture = neutral,PublicKeyToken = null, ** viewModelName **:SampleApp.Views.SecondPageViewModel,SampleApp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null –
@Haukinger我的视图模型位于TestVM类库项目,程序集名称“TestVM” –