2016-06-09 91 views
0

在wpf/mvvm/prism应用程序中,当我从视图导航到另一个视图时遇到了问题。WPF /棱镜导航:无法创建导航目标BView

我把一个断点在导航功能准备/请求,在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。 每个视图在其自己的文件夹中都有其接口和视图模型。

可能是什么问题? 干杯

回答

0

我能够调查越来越做从InitializeModule(视图注射)(模块):

 var region = RegionManager.Regions[RegionNames.TabRegion]; 
     var view = Container.Resolve<BView>(); 
     region.Add(view); 
     region.Activate(view); 

这导致了更可读的消息:

抛出异常:“ Microsoft.Practices.Unity.dll中的Microsoft.Practices.Unity.ResolutionFailedException'

附加信息:解析依赖失败,type =“Some.Namespace.BView”,name =“(none)”。

发生异常时:解决。

异常是:InvalidOperationException - 类型BViewModel具有长度为1的多个构造函数。无法消除歧义。

并通过确保我只有一个视图模型构造一个参数:

public BViewModel(IRegionManager regionManager) 
    { 
     _regionManager = regionManager; 
     Initialize(); 
    } 

我终于能走的更远。