WPF/棱镜导航:无法创建导航目标 BView
WPF / prism navigation : Cannot create navigation target BView
在 wpf/mvvm/prism 应用程序中,当我从一个视图导航到另一个视图时遇到问题。
我在导航函数prepare/request下了一个断点,在AViewModel:
private void Model(object sender)
{
if (sender == null) return;
var file = ((RawImage)sender).FullName;
var navParams = new NavigationParameters { { "filein", file } };
var uri = new Uri(typeof(BView).Name + navParams, UriKind.Relative);
_regionManager.RequestNavigate(RegionNames.TabRegion, uri, nr =>
{
var error = nr.Error;
var result = nr.Result;
}); //breakpoint here
}
ne.Error: 无法创建导航目标 'BView'
在模块中,我注册了以下类型:
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<AView>();
Container.RegisterType<IAViewModel, AViewModel>();
Container.RegisterTypeForNavigation<BView>();
Container.RegisterType<IBViewModel, BViewModel>();
Container.RegisterTypeForNavigation<CView>();
Container.RegisterType<ICViewModel, CViewModel>();
}
当我要求导航到 CView 时,它有效但 BView 无效。
每个视图在其自己的文件夹中都有其界面和视图模型。
可能是什么问题?
干杯
我能够进行更多调查并从(模块的)InitializeModule() 进行视图注入:
var region = RegionManager.Regions[RegionNames.TabRegion];
var view = Container.Resolve<BView>();
region.Add(view);
region.Activate(view);
这导致更易读的消息:
抛出异常:'Microsoft.Practices.Unity.ResolutionFailedException' in Microsoft.Practices.Unity.dll
附加信息:依赖项解析失败,类型 = "Some.Namespace.BView",名称 =“(none)”。
解析时发生异常。
异常是:InvalidOperationException - BViewModel 类型有多个长度为 1 的构造函数。无法消除歧义。
并确保我只有一个带有一个参数的视图模型构造函数:
public BViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
Initialize();
}
我终于可以更进一步了。
在 wpf/mvvm/prism 应用程序中,当我从一个视图导航到另一个视图时遇到问题。
我在导航函数prepare/request下了一个断点,在AViewModel:
private void Model(object sender)
{
if (sender == null) return;
var file = ((RawImage)sender).FullName;
var navParams = new NavigationParameters { { "filein", file } };
var uri = new Uri(typeof(BView).Name + navParams, UriKind.Relative);
_regionManager.RequestNavigate(RegionNames.TabRegion, uri, nr =>
{
var error = nr.Error;
var result = nr.Result;
}); //breakpoint here
}
ne.Error: 无法创建导航目标 'BView'
在模块中,我注册了以下类型:
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<AView>();
Container.RegisterType<IAViewModel, AViewModel>();
Container.RegisterTypeForNavigation<BView>();
Container.RegisterType<IBViewModel, BViewModel>();
Container.RegisterTypeForNavigation<CView>();
Container.RegisterType<ICViewModel, CViewModel>();
}
当我要求导航到 CView 时,它有效但 BView 无效。 每个视图在其自己的文件夹中都有其界面和视图模型。
可能是什么问题? 干杯
我能够进行更多调查并从(模块的)InitializeModule() 进行视图注入:
var region = RegionManager.Regions[RegionNames.TabRegion];
var view = Container.Resolve<BView>();
region.Add(view);
region.Activate(view);
这导致更易读的消息:
抛出异常:'Microsoft.Practices.Unity.ResolutionFailedException' in Microsoft.Practices.Unity.dll
附加信息:依赖项解析失败,类型 = "Some.Namespace.BView",名称 =“(none)”。
解析时发生异常。
异常是:InvalidOperationException - BViewModel 类型有多个长度为 1 的构造函数。无法消除歧义。
并确保我只有一个带有一个参数的视图模型构造函数:
public BViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
Initialize();
}
我终于可以更进一步了。