Laden...

PRISM MEF - Views und Viewmodels auto. exportieren und importieren

Erstellt von Briefkasten vor 8 Jahren Letzter Beitrag vor 8 Jahren 926 Views
Briefkasten Themenstarter:in
446 Beiträge seit 2004
vor 8 Jahren
PRISM MEF - Views und Viewmodels auto. exportieren und importieren

Hallo,

ich beschäftige mich seit kurzem mit MEF und PRISM.

Mein Ziel ist es, für die Exportierten Views auto. das ViewModel zu discovern und in die View zu injected.

Im BootStrapper für die Shell sieht das bei mir momentan so aus (MainWindow und MainWindowViewModel haben jeweils das Export Attribut gesetzt.):


        protected override void ConfigureAggregateCatalog()
        {
            RegistrationBuilder registrationBuilder = new RegistrationBuilder();
            //inject the mainwindowviewmodel into the datacontext property
            registrationBuilder.ForType<MainWindow>().ImportProperty<MainWindowViewModel>(p => p.DataContext);
            //add current assembly to catalog
            this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Bootstrapper).Assembly, registrationBuilder));

        }

Die Applikationsmodule befinden sich in eigenen Assemblies und beinhalten die Views (UserControls) und ViewModels. Das hat zur Folge, dass ich im Projekt in dem sich die Shell befindet keine Projektreferenzen auf die Module habe und kein Import auf den DataContext setzen kann weil der Modul Typ nicht bekannt ist.

Im Prinzip möchte ich für alle Exportierte Views (in den Assemblie Modulen) folgendes ausführen

            registrationBuilder.ForType<View>().ImportProperty<ViewModel>(p => p.DataContext);

Meine Namenskonventionen sehen es so vor, dass die ViewModels sich aus "Viewnamen" + "ViewModel" zusammensetzen. Falls das in irgendeiner weise helfen sollte.

Wäre es möglich in einem eigenen erstellten Export Attribut als Parameter das zu importierende ViewModel anzugeben, dass dann die ImportProperty() Methode ausführt? Aber dazu fehlt mir ja dann wieder der CompositeContainer.

Wie kann ich das Problem lösen?

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

M
177 Beiträge seit 2009
vor 8 Jahren

Hey,

das manuelle setzen des DataContext via MEF ist mit PRISM nicht notwendig. Verwende

prism:ViewModelLocator.AutoWireViewModel="True"

siehe auch Using the ViewModelLocator class to connect view models to views