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);
                }
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        /// <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);
            }
        }
Esempio n. 8
0
        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);
        }