I am trying to navigate to the same view (same as the active one), but with new parameters. The problem is that I struggle to find a clean way to get a currently active view's name from RegionManager
How to get a name of the active view in PRISM
From my understanding, I would recommend implementing an interface on each of your Views that provides the necessary information to determine which view it is, then use the ActiveViews
property of the IRegion
to access the active views.
Something like:
//Interface for identifying the Views
public interface IApplicationView
{
string ViewName { get; }
}
//Example of a View with logic to determine which instance of the View it is
public class ApplicationView : UserControl, IApplicationView
{
public string ViewName
{
get { return this.isViewA ? return "ViewA" : return "ViewB"; }
}
}
//Example of determining which view
public class OtherComponent
{
public string GetActiveViewName(IRegion region)
{
IApplicationView activeView = region.ActiveViews.FirstOrDefault() as IApplicationView;
return activeView == null ? string.Empty : activeView.ViewName;
}
}
As fas as I can see there isn't a clean way to do it, so method above solves the problem. –
Latrinalatrine
Is there a way to get existing ViewModels using the IoC container (in my case DryIoc)? I tried
this == _Container.Resolve<ShellViewModel>
from the ShellViewModel
and it evaluated to false
. –
Neoplasty I'm not sure if this method is implemented in Prism 4. But in Prism 6, you can get the name of the active view using the NavigationService
Journal
.
For example:
string name = RegionManager.Regions["MainRegion"].NavigationService.Journal.CurrentEntry.Uri;
© 2022 - 2024 — McMap. All rights reserved.
IRegion
has anActiveViews
property that will give you a read-only collection of all currently active views. Have you tried that? – LabradoriteIMyView
interface with aName
property that all your views implement, then cast the object toIMyView
and get the name of the view? – Labradoritepublic
orinternal
(if the component is within the same assembly). Using an interface to surface public properties is actually good practice. – Labradorite