protected virtual bool TryRestoreInternal(IDataContext context) { IDictionary <string, object> dictionary; var items = GetItems(out dictionary); if (items == null || items.Count == 0) { return(false); } foreach (var item in items.OrderBy(tuple => tuple.Index)) { dictionary.Remove(NumberPrefix + item.Id); dictionary.Remove(StatePrefix + item.Id); if (item.State != null) { using (var ms = new MemoryStream(item.State)) { var dataContext = (IDataContext)_serializer.Deserialize(ms); var viewModel = _viewModelProvider.RestoreViewModel(dataContext, context, true); viewModel.ShowAsync(context); } } } return(true); }
private static void OnViewModelRestored(IViewModelProvider sender, ViewModelRestoredEventArgs args) { var mainViewModel = args.ViewModel as MainViewModel; if (mainViewModel != null) { var context = args.State.GetData(SelectedItemState); if (context != null) { mainViewModel.SelectedItem = sender.RestoreViewModel(context, DataContext.Empty, false); } } }
protected virtual void RestoreViewModel([NotNull] Type viewModelType, [NotNull] IDataContext viewModelState, [NotNull] FrameworkElement element, [NotNull] IDictionary <string, object> state, [NotNull] object args, [NotNull] IDataContext context) { context = context.ToNonReadOnly(); context.AddOrUpdate(InitializationConstants.ViewModelType, viewModelType); #if WINDOWSCOMMON context.Add(DynamicViewModelWindowPresenter.RestoredViewConstant, element); context.Add(DynamicViewModelWindowPresenter.IsOpenViewConstant, true); #endif IViewModel viewModel = _viewModelProvider.RestoreViewModel(viewModelState, context, false); _viewManager.InitializeViewAsync(viewModel, element, context).WithTaskExceptionHandler(this); _viewModelPresenter.Restore(viewModel, context); }
protected virtual void RestoreViewModel([NotNull] Type viewModelType, [NotNull] IDataContext viewModelState, [NotNull] FrameworkElement element, [NotNull] IDictionary <string, object> state, [NotNull] object args, [NotNull] IDataContext context) { context = context.ToNonReadOnly(); context.AddOrUpdate(InitializationConstants.ViewModelType, viewModelType); #if WINDOWS_UWP context.Add(WindowPresenterConstants.RestoredView, element); context.Add(WindowPresenterConstants.IsViewOpened, true); #endif IViewModel viewModel = _viewModelProvider.RestoreViewModel(viewModelState, context, true); context.AddOrUpdate(NavigationConstants.ViewModel, viewModel); _viewManager.InitializeViewAsync(viewModel, element, context); _viewModelPresenter.Restore(context); }
protected virtual void RestoreViewModel([NotNull] Type viewModelType, [NotNull] IDataContext viewModelState, [NotNull] NSObject item, [NotNull] NSCoder coder, [NotNull] IDataContext context) { context = context.ToNonReadOnly(); context.AddOrUpdate(InitializationConstants.ViewModelType, viewModelType); if (item is IModalView) { context.Add(DynamicViewModelWindowPresenter.RestoredViewConstant, item); context.Add(DynamicViewModelWindowPresenter.IsOpenViewConstant, true); } var viewModel = _viewModelProvider.RestoreViewModel(viewModelState, context, false); _viewManager.InitializeViewAsync(viewModel, item, context).WithTaskExceptionHandler(this); _viewModelPresenter.Restore(viewModel, context); }
protected virtual void RestoreViewModel([NotNull] Type viewModelType, [NotNull] IDataContext viewModelState, [NotNull] NSObject item, [NotNull] NSCoder coder, [NotNull] IDataContext context) { context = context.ToNonReadOnly(); context.AddOrUpdate(InitializationConstants.ViewModelType, viewModelType); if (item is IModalView) { context.Add(WindowPresenterConstants.RestoredView, item); context.Add(WindowPresenterConstants.IsViewOpened, true); } var viewModel = _viewModelProvider.RestoreViewModel(viewModelState, context, true); context.AddOrUpdate(NavigationConstants.ViewModel, viewModel); _viewManager.InitializeViewAsync(viewModel, item, context); _viewModelPresenter.Restore(context); }
/// <summary> /// Occurs on load element state. /// </summary> public virtual void OnLoadState(FrameworkElement element, IDictionary <string, object> state, object args, IDataContext context = null) { Should.NotBeNull(element, "element"); Should.NotBeNull(state, "state"); object value; if (!state.TryGetValue(VmStateKey, out value)) { return; } state.Remove(VmStateKey); var container = (LazySerializableContainer)value; if (container == null) { return; } object dataContext = element.DataContext; Type vmType = Type.GetType(container.ViewModelType, false); if (vmType == null || (dataContext != null && dataContext.GetType().Equals(vmType))) { return; } context = context.ToNonReadOnly(); context.AddOrUpdate(InitializationConstants.ViewModelType, vmType); //The navigation is already handled. var eventArgs = args as NavigationEventArgs; if (eventArgs != null && eventArgs.GetHandled()) { eventArgs.SetHandled(false); PlatformExtensions.SetViewModelState(eventArgs.Content, container.GetContext(_serializer)); } else { IViewModel viewModel = _viewModelProvider.RestoreViewModel(container.GetContext(_serializer), context, false); _viewManager.InitializeViewAsync(viewModel, element).WithTaskExceptionHandler(this); _viewModelPresenter.Restore(viewModel, context); } }
private void RestoreState(NSObject item, NSCoder coder) { RestoreNavigationParameter(item, coder); if (!coder.ContainsKey(VmStateKey) || !coder.ContainsKey(VmTypeKey)) { return; } var vmTypeName = (NSString)coder.DecodeObject(VmTypeKey); if (vmTypeName == null) { return; } object dataContext = Infrastructure.ViewManager.GetDataContext(item); var vmType = Type.GetType(vmTypeName, false); if (vmType == null || (dataContext != null && dataContext.GetType().Equals(vmType))) { return; } byte[] bytes = coder.DecodeBytes(VmStateKey); IDataContext state; using (var ms = new MemoryStream(bytes)) state = (IDataContext)_serializer.Deserialize(ms); var context = new DataContext { { InitializationConstants.ViewModelType, vmType } }; if (item is IModalView) { context.Add(DynamicViewModelWindowPresenter.RestoredViewConstant, item); context.Add(DynamicViewModelWindowPresenter.IsOpenViewConstant, true); } var viewModel = _viewModelProvider.RestoreViewModel(state, context, false); _viewManager.InitializeViewAsync(viewModel, item); _viewModelPresenter.Restore(viewModel, context); }