2016-11-04 3 views
2

Ich versuche eine PRISM-App zu erstellen, die Module und Ansichten verwendet, die On-Demand geladen wurden. Wenn ich Ansichten und Module als "WhenAvailable" lade funktioniert alles, aber das ist nicht was ich will.Abrufen des Objekttyps zur Laufzeit 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); 
    } 

Hier ist mein Code, der nach Ansicht der Laden, in MainWindowViewModel Klasse, die sonst Regionen und nichts abwickelt. Ich würde arbeiten, wenn ich nur irgendwie den wirklichen Objekttyp auf Navigationsfunktion erhalten könnte. Es ist immer System.RuntimeType obwohl es im Debugger sagt, dass es ein UserControl ist, das IView implementiert. Ich kann meinen Kopf nicht dazu bringen, zu arbeiten.
Ich weiß, dass diese Methode funktioniert, wenn ich UserControl explizit anstelle von T alles richtig lädt. Aber ich habe mehrere Ansichten in meiner App, und neu zu kommen, also dies nicht generisch zu tun ist irgendwie keine Option.
Jede Hilfe wird sehr geschätzt.

+0

Mit welcher Version von Prism versuchen Sie das? –

+0

@ R.Richards Ich glaube, es ist die neueste Version, habe es von nuget 2 Wochen her, seine ** 6.2.0.0 ** – drajvver

+0

Ihr Code in Kombination mit Ihren Kommentaren macht keinen Sinn für mich. Um Module bei Bedarf zu laden, müssen Sie den Modulmanager verwenden. Wenn Sie der Region manuell Ansichten hinzufügen, müssen Sie ihnen keinen Namen geben. Erstellen Sie einfach die Ansicht und kleben Sie sie in die Region. –

Antwort

0

Benutzer dynamisch Schlüsselwort. Es akzeptiert den Typ zur Laufzeit.

Verwandte Themen