static void InvokeOnRegionManagerAwareElement(object item, Action <IRegionManagerAware> invocation) { var rmAwareItem = item as IRegionManagerAware; if (rmAwareItem != null) { invocation(rmAwareItem); } var frameworkElement = item as FrameworkElement; if (frameworkElement != null) { IRegionManagerAware rmAwareDataContext = frameworkElement.DataContext as IRegionManagerAware; if (rmAwareDataContext != null) { var frameworkElementParent = frameworkElement.Parent as FrameworkElement; if (frameworkElementParent != null) { var rmAwareDataContextParent = frameworkElementParent.DataContext as IRegionManagerAware; if (rmAwareDataContextParent != null) { if (rmAwareDataContext == rmAwareDataContextParent) { return; } } } invocation(rmAwareDataContext); } } }
static void InvokeOnRegionManagerAwareElement(object item, Action <IRegionManagerAware> invocation) { #if LOGGING long startTicks = Log.Trace($"Enter", Common.LOG_CATEGORY); #endif // Want to support View and/or ViewModel first approaches var rmAwareItem = item as IRegionManagerAware; // ViewModel first approach // Check if supports IRegionManagerAware if (rmAwareItem != null) { invocation(rmAwareItem); } // View first approach // If we get a View it will be a FrameworkElement in WPF var frameworkElement = item as FrameworkElement; if (frameworkElement != null) { IRegionManagerAware rmAwareDataContext = frameworkElement.DataContext as IRegionManagerAware; if (rmAwareDataContext != null) { var frameworkElementParent = frameworkElement.Parent as FrameworkElement; // If a view does not have a DataContext, i.e. a ViewModel, it will inherit DataContext of parent view // Avoid setting RegionManager of parent view if (frameworkElementParent != null) { var rmAwareDataContextParent = frameworkElementParent.DataContext as IRegionManagerAware; if (rmAwareDataContextParent != null) { if (rmAwareDataContext == rmAwareDataContextParent) { // This View doesn't have a ViewModel. // It is using ViewModel of Visible parent. Do not set. return; } } } invocation(rmAwareDataContext); } } #if LOGGING Log.Trace($"Exit", Common.LOG_CATEGORY, startTicks); #endif }
private void RemoveScopedRegionManagerFromView(IModelVisualizer modelVisualizer) { IRegionManagerAware regionManagerAware = modelVisualizer.ViewModel as IRegionManagerAware; if (regionManagerAware != null) { RegionManager.SetRegionManager(modelVisualizer.View, null); } }
private void RegisterScopedRegionManagerToView(IModelVisualizer modelVisualizer) { IRegionManagerAware regionManagerAware = modelVisualizer.ViewModel as IRegionManagerAware; if (regionManagerAware != null) { RegionManager.SetRegionManager(modelVisualizer.View, regionManagerAware.RegionManager); } }
private static void InvokeOnRegionManagerAwareElement(object item, Action <IRegionManagerAware> invocation) { var regionManagerAwareItem = item as IRegionManagerAware; if (regionManagerAwareItem != null) { invocation(regionManagerAwareItem); } FrameworkElement frameworkElement = item as FrameworkElement; if (frameworkElement != null) { IRegionManagerAware regionManagerAwareDataContext = frameworkElement.DataContext as IRegionManagerAware; if (regionManagerAwareDataContext != null) { invocation(regionManagerAwareDataContext); } } }
static void InvokeOnRegionManagerAwareElement(object item, Action <IRegionManagerAware> invocation) { var rmAwareItem = item as IRegionManagerAware; if (rmAwareItem != null) { invocation(rmAwareItem); } var frameworkElement = item as FrameworkElement; if (frameworkElement != null) { IRegionManagerAware rmAwareDataContext = frameworkElement.DataContext as IRegionManagerAware; if (rmAwareDataContext != null) { var frameworkElementParent = frameworkElement.Parent as FrameworkElement; // If a view does not have a DataContext, i.e. a ViewModel, it will inherit DataContext of parent view // Avoid setting RegionManager of parent view if (frameworkElementParent != null) { var rmAwareDataContextParent = frameworkElementParent.DataContext as IRegionManagerAware; if (rmAwareDataContextParent != null) { if (rmAwareDataContext == rmAwareDataContextParent) { // This View doesn't have a ViewModel. Using ViewModel // of Visible parent. return; } } } invocation(rmAwareDataContext); } } }
private static void InvokeOnRegionManagerAwareElement(object item, Action <IRegionManagerAware> invocation) { var regionManagerAwareItem = item as IRegionManagerAware; if (regionManagerAwareItem != null) { invocation(regionManagerAwareItem); } FrameworkElement frameworkElement = item as FrameworkElement; if (frameworkElement != null) { IRegionManagerAware regionManagerAwareDataContext = frameworkElement.DataContext as IRegionManagerAware; if (regionManagerAwareDataContext != null) { // If a view doesn't have a data context (view model) it will inherit the data context from the parent view. // The following check is done to avoid setting the RegionManager property in the view model of the parent view by mistake. var frameworkElementParent = frameworkElement.Parent as FrameworkElement; if (frameworkElementParent != null) { var regionManagerAwareDataContextParent = frameworkElementParent.DataContext as IRegionManagerAware; if (regionManagerAwareDataContextParent != null) { if (regionManagerAwareDataContext == regionManagerAwareDataContextParent) { // If all of the previous conditions are true, it means that this view doesn't have a view model // and is using the view model of its visual parent. return; } } } invocation(regionManagerAwareDataContext); } } }