// *** Private Methods *** private void CreatePage(NavigationEntry entry) { // Create the View IViewLifetimeContext viewLifetimeContext = viewFactory.CreateView(entry.PageName); entry.ViewLifetimeContext = viewLifetimeContext; // Activate the view model if it implements IActivatable<,> // NB: Use reflection as we do not know the generic parameter types object viewModel = entry.ViewLifetimeContext.ViewModel; Type activatableInterface = ReflectionHelper.GetClosedGenericType(viewModel, typeof(IActivatable <,>)); if (activatableInterface != null) { // If required deserialize the arguments and state entry.DeserializeData(activatableInterface.GenericTypeArguments[0], activatableInterface.GenericTypeArguments[1]); // Activate the view model MethodInfo activateMethod = activatableInterface.GetTypeInfo().GetDeclaredMethod("Activate"); activateMethod.Invoke(viewModel, new object[] { entry.Arguments, entry.State }); } }
// *** Overriden base methods *** protected override void DisplayPage(IViewLifetimeContext viewLifetimeContext) { DisplayedViews.Add(viewLifetimeContext as MockViewLifetimeContext); }
public new void OnWindowClosing(IViewLifetimeContext viewLifetimeContext) { base.OnWindowClosing(viewLifetimeContext); }
// *** Methods *** public void DisplayPageDirect(IViewLifetimeContext viewLifetimeContext) { base.DisplayPage(viewLifetimeContext); }
// *** Protected Methods *** protected virtual void DisplayPage(IViewLifetimeContext viewLifetimeContext) { // Create a new content host for the page ContentControl contentHost = new ContentControl() { Content = viewLifetimeContext.View, HorizontalContentAlignment = HorizontalAlignment.Stretch, VerticalContentAlignment = VerticalAlignment.Stretch }; // Register for the window closing event to all disposal of the page and view-model Window.Current.Closed += (sender, e) => OnWindowClosing(viewLifetimeContext); // Display the page and activate the window Window.Current.Content = contentHost; Window.Current.Activate(); }
protected void OnWindowClosing(IViewLifetimeContext viewLifetimeContext) { // Call NavigatingFrom(...) methods if (viewLifetimeContext.View is INavigationAware) ((INavigationAware)viewLifetimeContext.View).NavigatingFrom(NavigationMode.Back); if (viewLifetimeContext.ViewModel is INavigationAware) ((INavigationAware)viewLifetimeContext.ViewModel).NavigatingFrom(NavigationMode.Back); // Dispose of the view lifetime context viewLifetimeContext.Dispose(); }
protected void OnWindowClosing(IViewLifetimeContext viewLifetimeContext) { if (viewLifetimeContext == null) throw new ArgumentNullException(nameof(viewLifetimeContext)); // Call NavigatingFrom(...) methods if (viewLifetimeContext.View is INavigationAware) ((INavigationAware)viewLifetimeContext.View).NavigatingFrom(PageNavigationMode.Back); if (viewLifetimeContext.ViewModel is INavigationAware) ((INavigationAware)viewLifetimeContext.ViewModel).NavigatingFrom(PageNavigationMode.Back); // Dispose of the view lifetime context viewLifetimeContext.Dispose(); }
// *** Constructors *** public PageDetails(IViewLifetimeContext viewLifetimeContext) { this.ViewLifetimeContext = viewLifetimeContext; }