是否可以引用位于不同可移植类库中的Viewmodel和位于不同可移植类库中的Views?
我的项目结构如下:
在App.cs中,我按如下方式注册了页面
Container.RegisterTypeForNavigation<SecondPage, TestVM.ViewModels.SecondPageViewModel>();
导航到SecondPage但是构造函数,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);
});
}
但是如何引用我的viewmodel所在的程序集?
答案 0 :(得分:1)
回应你的评论:
viewModelName:SampleApp.Views.SecondPageViewModel,SampleApp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
调整canvas.style.width="100%"
以便生成实际视图模型名称:
var viewModelName = String.Format(CultureInfo.InvariantCulture, "{0}ViewModel, {1}", viewName, viewAssemblyName);
的内容
TestVM.ViewModels.SecondPageViewModel, TestVM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
答案 1 :(得分:1)
您当然可以覆盖ViewModel位置提供程序的默认配置。但是,更简单,更快速的方法是使用View / ViewModel注册扩展。就像你可以做的那样:
Container.RegisterTypeForNavigation<ViewA>()
你也可以这样做:
Container.RegisterTypeForNavigation<ViewA,ViewAViewModel>()
第二种方法消除了通过反射定位ViewModel的需要,这可以提供稍微更好的性能。因为您提供了ViewModel,所以您无需担心ViewModel所处的程序集,或者您是否遵循了正确的约定。