void UpdateFrameContent()
        {
            var model = Frame.CurrentContentViewModel;

            if (model == null)
            {
                if (_currentView != null)
                {
                    _currentView.ViewModel = null;
                }

                View.Content = null;
                return;
            }

            if (_currentView?.ViewModel == model)
            {
                return;
            }

            var view = _currentView = (IBindableView)Service <IViewFactory> .Get().CreateView(model.GetPrefix(), model.GetViewStyle());

            view.ViewModel = model;

            var ext = Frame.GetExtension <ICustomContentPresenter>();

            if (ext != null)
            {
                ext.Present(View, view);
            }
            else
            {
                View.Content = view;
            }
        }
        void OnNavigated(object sender, NavigationEventArgs e)
        {
            var view = e.Content as IBindableView;

            _currentView = view;

            if (view != null)
            {
                if (view.ViewModel != null)
                {
                    _viewmodelsHistoryCache.Remove(view);
                    _viewmodelsHistoryCache.Add(view, view.ViewModel);
                }
                else
                {
                    if (_viewmodelsHistoryCache.TryGetValue(view, out ViewModel viewModel))
                    {
                        view.ViewModel = viewModel;
                    }
                }

                if (Frame.CurrentContentViewModel != view.ViewModel)
                {
                    Frame.CurrentContentViewModel = view.ViewModel;
                }
            }

            Frame.CanGoBack    = View.CanGoBack;
            Frame.CanGoForward = View.CanGoForward;
        }
예제 #3
0
        public static Binding <TSource, TTarget> CreateFromBindableView(IBindableView <TSource> bindableView, TTarget target)
        {
            var binding = new Binding <TSource, TTarget>(bindableView.ViewModel, target);

            Bindings.SetBindableView(binding.BindingGroup, bindableView);
            return(binding);
        }
        /// <summary>
        ///     Set DataContext with reloads existing bindings.
        /// </summary>
        /// <param name="self">Bindable View.</param>
        /// <param name="dataContext">DataContext.</param>
        public static void ReloadDataContext(this IBindableView self, object dataContext)
        {
            self.DoDetachBindings();

            self.SetDataContext(dataContext);

            self.DoAttachBindings();
        }
        protected override void OnBind()
        {
            View.JournalOwnership = JournalOwnership.OwnsJournal;

            _currentView = View.Content as IBindableView;

            SubscribeOnPropertyChanged(Frame, nameof(INavigationPanelFrame.CurrentContentViewModel), UpdateFrameContent);
            UpdateFrameContent();

            Frame.GoBack    = GoBack;
            Frame.GoForward = GoForward;

            View.Navigated += OnNavigated;
        }
예제 #6
0
        public static void BindVM <TDescriptor>(
            IBindableView <IViewModelExpression <TDescriptor> > view,
            Action <IVMBinder <TDescriptor> > bindingConfigurator
            ) where TDescriptor : IVMDescriptor
        {
            if (DesignerProperties.GetIsInDesignMode((DependencyObject)view))
            {
                return;
            }

            VMPropertyBinder <TDescriptor> binder = new VMPropertyBinder <TDescriptor>();

            bindingConfigurator(binder);
            binder.Execute();
        }
예제 #7
0
        public void Init(IBindableView view)
        {
            var disposableObject = new DisposableObject();

            disposableObject.Add(view.Binding());
            IDisposable disposable = Disposable.Empty;

            disposable = view.DisposableNotification().Subscribe(
                _ =>
            {
                disposable.Dispose();
                disposableObject.Dispose();

                DisposableObject obj;
                _dictionary.TryRemove(view, out obj);
            });

            _dictionary.TryAdd(view, disposableObject);
        }
예제 #8
0
        void OnSelectedItemsChanged()
        {
            var indexes = Frame.SelectedItemsIndexes;

            if (indexes.IsNullOrEmpty())
            {
                if (_currentView == null)
                {
                    return;
                }

                _currentView.ViewModel = null;
                View.Content           = null;
                return;
            }

            var model = Frame.GetItemAtIndex(indexes[0]);
            var view  = _currentView = (IBindableView)Service <IViewFactory> .Get().CreateView(model.GetPrefix(), model.GetViewStyle());

            view.ViewModel = model;
            View.Content   = view;
        }
        public void Present(System.Windows.Controls.Frame frame, IBindableView content)
        {
            var currentContent = (UIElement)frame.Content;

            if (currentContent == content)
            {
                return;
            }

            Action complete = () => frame.Content = content;

            if (currentContent != null)
            {
                var fadeOutAnimation = new DoubleAnimation(0d, TimeSpan.FromSeconds(0.25));
                fadeOutAnimation.Completed += (s, e) => complete();
                currentContent.BeginAnimation(UIElement.OpacityProperty, fadeOutAnimation);
            }
            else
            {
                complete();
            }
        }
예제 #10
0
 public static IBinding <TSource, TTarget> Bind <TSource, TTarget>(this IBindableView <TSource> self, TTarget target)
     where TSource : class
     where TTarget : class
 {
     return(Binding <TSource, TTarget> .CreateFromBindableView(self, target));
 }
예제 #11
0
 internal static void SetBindableView(BindingGroup group, IBindableView bindableView)
 {
     BindableViews[group.Id] = new WeakReference <IBindableView>(bindableView);
 }