Beispiel #1
0
        public async Task Navigate(Type targetPage, IViewModel bindingContext)
        {
            IViewPage page = (IViewPage)Activator.CreateInstance(targetPage);

            page.ViewModel = bindingContext;
            await Application.Current.MainPage.Navigation.PushAsync((Page)page, true);
        }
Beispiel #2
0
        /// <summary>
        /// 加载内容
        /// </summary>
        /// <param name="uri"></param>
        /// <returns></returns>
        protected virtual IViewPage LoadContent(Link link)
        {
            IModule vPageModule = this.Module.ModuleFramework.GetModule(link.ModuleName);

            string vPageAssemblyName = this.CheckAndTrimEndExtension(vPageModule.MainAssemblyName, ".dll");

            Uri vPageUri = new Uri(string.Format("/{0};Component/Pages/{1}", vPageAssemblyName, link.ViewPageLocation), System.UriKind.Relative);

            IViewPage vPage = Application.LoadComponent(vPageUri) as IViewPage;

            vPage.Module = this.Module;

            return(vPage);
        }
        private void ViewPageBox_ViewPageChanged(ViewPageBox vPageBox, Link nLink, IViewPage vPage)
        {
            MainViewModuleViewModel mvmvm = this.DataContext as MainViewModuleViewModel;

            foreach (LinkGroupViewModel lgvm in mvmvm.LinkGroupViewModels)
            {
                LinkViewModel selectLinkViewModel = lgvm.LinkViewModels.FirstOrDefault(lvm => lvm.ModuleName == nLink.ModuleName && lvm.ViewPageLocation == nLink.ViewPageLocation);

                if (selectLinkViewModel != null)
                {
                    this.SelectedLink = selectLinkViewModel;
                    break;
                }
            }
        }
Beispiel #4
0
        private void SetContent(Link nLink, IViewPage vPageModule)
        {
            vPageModule.ViewPageBox = this;

            if (this.OnViewPageChanging != null)
            {
                this.OnViewPageChanging(this, vPageModule);
            }

            this.Content = vPageModule;

            if (this.OnViewPageChanged != null)
            {
                this.OnViewPageChanged(this, nLink, vPageModule);
            }

            SetValue(IsViewPageLoadingPropertyKey, false);
        }
Beispiel #5
0
 public void QueuePageToCompile(IViewPage pageToCompile)
 {
     waiter.Reset();
     compilePages.Enqueue(pageToCompile);
 }
Beispiel #6
0
 public void QueuePageToCompile(IViewPage pageToCompile)
 {
     compilePages.Enqueue(pageToCompile);
 }
 public void QueuePageToCompile(IViewPage pageToCompile)
 {
     compilePages.Enqueue(pageToCompile);
 }
        // --------------------------------------------------------------------------------------------------------------------

        /// <summary>
        /// Allows setting the 'Page' property using chained calls.
        /// </summary>
        public static T SetPage <T>(this T component, IViewPage page) where T : IWebViewComponent
        {
            component.Page = page; return((T)component);
        }
Beispiel #9
0
        /// <summary>
        /// 当显示器里面link发生变化的时候执行
        /// </summary>
        /// <param name="oldLink"></param>
        /// <param name="newLink"></param>
        private void OnSourceChanged(Link oldLink, Link newLink)
        {
            if (newLink != null && newLink == oldLink)
            {
                return;
            }

            //启动加载界面
            SetValue(IsViewPageLoadingPropertyKey, true);

            //关闭前面没有结束的线程
            if (this._cancellationTokenSource != null)
            {
                this._cancellationTokenSource.Cancel();
                this._cancellationTokenSource = null;
            }

            IViewPage newViewPage = null;

            if (newLink != null)
            {
                if (!this._viewModuleCache.TryGetValue(newLink, out newViewPage))
                {
                    this._cancellationTokenSource = new CancellationTokenSource();
                    this.ContentLoader.Module     = this.ModuleFramework.GetModule(newLink.ModuleName);//设置加载当前所用的模块

                    TaskScheduler    scheduler = TaskScheduler.FromCurrentSynchronizationContext();
                    Task <IViewPage> task      = this.ContentLoader.LoadContentAsync(newLink, this._cancellationTokenSource.Token);
                    task.ContinueWith(t =>
                    {
                        try
                        {
                            if (t.IsCanceled || this._cancellationTokenSource.IsCancellationRequested)
                            {
                                Debug.WriteLine("Cancelled navigation to '{0}'", newLink);

                                if (this._linkStack.Peek() == newLink && this.DisplayLink != this._linkStack.Peek())
                                {
                                    this._linkStack.Pop();
                                }
                            }
                            else if (!t.IsFaulted && t.IsCompleted)
                            {
                                IViewPage viewModule = t.Result as IViewPage;

                                if (viewModule.Parameters == null)
                                {
                                    viewModule.Parameters = new Dictionary <string, object>();
                                }

                                if (newLink.Parameters != null && newLink.Parameters.Count > 0)
                                {
                                    foreach (string keyName in newLink.Parameters.Keys)
                                    {
                                        viewModule.Parameters.Add(keyName, newLink.Parameters[keyName]);
                                    }

                                    newLink.Parameters.Clear();
                                }

                                if (viewModule.Cached)
                                {
                                    this._viewModuleCache[newLink] = viewModule;
                                }

                                if (this._linkStacked && viewModule.Stacked)
                                {
                                    this._linkStack.Push(newLink);
                                }

                                SetContent(newLink, viewModule);

                                if (this.OnViewFailure != null)
                                {
                                    this.OnViewFailure(this, newLink, oldLink);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            if (this.OnViewFailure != null)
                            {
                                this.OnViewFailure(this, newLink, oldLink);
                            }
                        }
                        finally
                        {
                            this._cancellationTokenSource.Dispose();
                            this._cancellationTokenSource = null;
                        }
                    }, scheduler);
                }
                else
                {
                    SetContent(newLink, newViewPage);
                }
            }
        }
Beispiel #10
0
 public IViewPage Push(IViewPage view)
 {
     Views.Push(view); return(view);
 }