/// <summary> /// Occurs after navigation /// </summary> /// <param name="sender"> The event sender. </param> /// <param name="e"> The event args. </param> protected virtual async void OnNavigated(object sender, NavigationEventArgs e) { if (e.Uri.IsAbsoluteUri || e.Content == null) { return; } ViewLocator.InitializeComponent(e.Content); var viewModel = ViewModelLocator.LocateForView(e.Content); if (viewModel == null) { return; } var page = e.Content as Page; if (page == null) { throw new ArgumentException("View '" + e.Content.GetType().FullName + "' should inherit from Page or one of its descendents."); } if (treatViewAsLoaded) { page.SetValue(View.IsLoadedProperty, true); } TryInjectParameters(viewModel, e.ExtraData); ViewModelBinder.Bind(viewModel, page, null); if (viewModel is IActivate activator) { await activator.ActivateAsync(); } GC.Collect(); }
/// <summary> /// Binds the view model. /// </summary> /// <param name="view">The view.</param> /// <param name="viewModel">The view model.</param> protected virtual async Task BindViewModel(DependencyObject view, object viewModel = null) { ViewLocator.InitializeComponent(view); viewModel = viewModel ?? ViewModelLocator.LocateForView(view); if (viewModel == null) { return; } if (treatViewAsLoaded) { view.SetValue(View.IsLoadedProperty, true); } TryInjectParameters(viewModel, CurrentParameter); ViewModelBinder.Bind(viewModel, view, null); if (viewModel is IActivate activator) { await activator.ActivateAsync(); } }