Was ist die beste Methode, um Ansichten dynamisch aus einem Navigationssteuerelement in Prism zu laden?

StackOverflow https://stackoverflow.com/questions/1678423

  •  16-09-2019
  •  | 
  •  

Frage

Ich habe die Navigation durch meine Anwendung mithilfe eines Menüsteuerelements implementiert, das beim Klicken auf ein Menüelement ein Ereignis mithilfe von EventAggregator veröffentlicht.Etwas wie unten gezeigt,

this.eventAggregator.GetEvent<ViewRequestedEvent>()
                    .Publish(new BusinessObject.Model.MenuModel
                    {
                        Module = "Dashboard",
                        PresenterClass = "DashboardViewModel"
                    });

Die meisten Module in meiner Bewerbung sind Abonnenten dieser Veranstaltung.Sie verwenden einen Filter, um nur die für das Modul relevanten Ereignisse zu abonnieren

this.eventAggregator.GetEvent<ViewRequestedEvent>()
            .Subscribe(LoadViewRequest, ThreadOption.UIThread, true, i => i.Module == "Dashboard");

Die Ansichtsanfrage wird wie folgt gehandhabt:

private void LoadRequestedView(MenuModel menuItem)
{
    try
    {
        IDashboardViewModel viewModel = this.container.Resolve(Type.GetType(menuItem.PresenterClass)) as IDashboardViewModel;
        this.regionManager.Regions["ViewRegion"].Add(viewModel.View);
        this.regionManager.Regions["ViewRegion"].Activate(viewModel.View);
        this.eventAggregator.GetEvent<ViewNotificationEvent>().Publish(menuItem.Description);
    }
    catch (ResolutionFailedException) { }
}

Wie bewerten Sie diese Umsetzung?Wenn Sie denken, dass es scheiße ist, helfen Sie mir, es zu verbessern, oder schlagen Sie eine bessere Alternative vor.

War es hilfreich?

Lösung

Ich denke, bei diesem Modell mangelt es Ihnen an der Trennung der Belange.Ich versuche im Allgemeinen, die Präsentation gegenüber der Shell aufrechtzuerhalten.In dieser Frage erfahren Sie, wie ich dies umsetzen würde.Es vereinfacht die Dinge und abstrahiert die Idee eines RegionManagers von den Modulen:

Integrieren von Modulen mit Anwendungen in Prism, auch bekannt als CompositeWpf

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top