Samengestelde weergave - Weergave bestaat al in regiofout

Ik werk aan een WPF/Prism 4/AvalonDoc-applicatie.

Een van mijn opvattingen is erg gecompliceerd en een ViewModel enorm en onhandelbaar. Dus heb ik besloten om het te splitsen naar kleinere weergaven met hun eigen ViewModels.

Ik heb een regio in de weergave geplaatst en de subweergave in die regio geladen met behulp van regionManager.RegisterViewWithRegion-methode van de constructor "master" ViewModel.

Dat werkt precies zoals verwacht wanneer slechts één instantie van een weergave wordt geladen. Maar wanneer ik het tweede exemplaar van dat scherm open (het wordt geladen als DocumentContent in AvalonDock's DocumentPane) krijg ik de foutmelding "Weergave bestaat al in regio".

Ik zou willen vermijden om de regio een unieke naam te geven, indien mogelijk. Is er een manier om aan te geven dat ik subweergave aan een specifiek exemplaar van de "hoofdweergave" toevoeg? Enig advies over hoe dit te doen?

2

2 antwoord

Als u MEF gebruikt en uw visie Singleton is d.w.z.

[PartCreationPolicy(CreationPolicy.Shared)]

en uw INavigationAware retourneert false

public override bool IsNavigationTarget(NavigationContext navigationContext)

{return false;}

U krijgt deze foutmelding.

Change [PartCreationPolicy(CreationPolicy.Shared)] to [PartCreationPolicy(CreationPolicy.NonShared)]

en je bent klaar.

1
toegevoegd

Ik vrees dat je niet meerdere regio's met dezelfde naam kunt hebben. Ik wil de weergaven liever niet splitsen wanneer het kijkmodel gecompliceerd wordt. U kunt het weergavemodel splitsen in verschillende gespecialiseerde view-modellen.

Een voorbeeld. U hebt een gebruikersbeheer. Eén weergavemodel is de lijst met alle gebruikers. Deze lijst bevat modellen voor gebruikersweergave. En elk gebruikersaanzichtmodel bevat een instantie van een gebruikersrechtenviewmodel dat zelf weer een lijst met view-modellen is die slechts één gebruikersrecht vertegenwoordigen. Dus de logica van het presenteren van een speciaal gebruikersrecht gaat naar het corresponderende weergavemodel en niet naar het "master" gebruikerslijstzichtmodel. Op deze manier kunt u uw bezorgdheden scheiden in verschillende weergavemodellen.

Het binden aan deze weergavemodellen is net zo eenvoudig als het hebben van slechts één weergavemodel. Alleen het pad wordt wat langer. Wanneer de gegevenscontext het gebruikerslijstweergavemodel is uit het bovenstaande voorbeeld, kunt u een bindend pad zoals CurrentUserVM.UserRightsVM gebruiken om de lijst met gebruikersrechten te krijgen.

0
toegevoegd