2016-11-04 27 views
2

我試圖創建一個使用模塊和視圖加載按需的PRISM應用程序。當我加載視圖和模塊爲「WhenAvailable」時,一切正常,但這不是我想要的。在運行時獲取對象類型PRISM MVVM

void Navigate(object obj) 
    { 
     if (obj != null) 
     { 
      PreloadView(obj as IView, "ContentRegion"); 
      _manager.RequestNavigate("ContentRegion", obj.ToString()); 
     } 
    } 

    private void PreloadView<T>(T obj, string regionName) where T : IView 
    { 
     var region = _manager.Regions[regionName]; 
     var viewName = obj.ToString(); 

     var view = region.GetView(viewName); 
     if (view == null) 
     { 
      view = _container.Resolve<T>(); 
      region.Add(view, viewName); 
     } 
     _manager.Regions[regionName].Activate(view); 
    } 

這裏是我的代碼與加載視圖,位於該處理區,並沒有別的MainWindowViewModel類。我會工作,如果只是我可以以某種方式獲得Navigate函數上的真實對象類型。它始終是System.RuntimeType即使它在調試器中說它是一個UserControl實現IView。我無法解決這個問題。
我知道這種方法的工作原理,因爲當我把UserControl明確,而不是T一切正常加載。但是我在我的應用程序中有多個視圖,並且會有新的視圖,所以非泛型操作不是一種選擇。
任何幫助將非常感激。

+0

你試過這個版本的Prism是什麼版本? –

+0

@ R.Richards我相信這是最新的版本,它在2周前從nuget得到,它的** 6.2.0.0 ** – drajvver

+0

您的代碼與您的評論相結合對我來說毫無意義。爲了按需加載模塊,您必須使用模塊管理器。另外,如果您手動將視圖添加到區域,則不必爲其指定名稱。只需創建視圖並將其粘貼到該區域即可。 –

回答

0

用戶動態關鍵字。它將在運行時接受類型。