2016-06-09 131 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(); 
    } 

我終於能走的更遠。