Esempio n. 1
0
        private BindingContext(IHtmlContainer scope, string name, BindingContextExitBehavior exitBehavior)
        {
            _scope = scope;
            _name  = name;

            _thread = Thread.CurrentThread;

            _exitBehavior = exitBehavior;
        }
Esempio n. 2
0
        /// <summary>
        /// 创建并进入一个绑定上下文
        /// </summary>
        /// <param name="name">上下文友好的名称,用于Trace识别</param>
        /// <param name="exitBehavior">退出上下文时的行为</param>
        /// <returns></returns>
        public static BindingContext Enter(string name, BindingContextExitBehavior exitBehavior)
        {
            var currentContext = Current;

            if (currentContext == null)
            {
                throw new InvalidOperationException();
            }

            return(Enter(currentContext.Scope, name, exitBehavior));
        }
Esempio n. 3
0
        /// <summary>
        /// 进入上下文
        /// </summary>
        protected void EnterCore(BindingContextExitBehavior behavior)
        {
            var currentContext = Current;

            if (currentContext != null)
            {
                currentContext.VerifyAccess(); //进入上下文时,也要检查先前的上下文是否同一线程。

                currentContext.Commit();       //强行提交先前的上下文。

                this.AboveContext            = currentContext;
                currentContext.FollowContext = this;
            }

            Current = this;

            Trace.Write("Binding", string.Format("Enter BindingContext \"{0}\"", Name));
        }
Esempio n. 4
0
        /// <summary>
        /// 创建并进入一个绑定上下文
        /// </summary>
        /// <param name="scope">绑定范围,超出此范围的绑定都不会被提交</param>
        /// <param name="name">上下文友好的名称,用于Trace识别</param>
        /// <param name="exitBehavior">退出上下文时的行为</param>
        /// <returns></returns>
        public static BindingContext Enter(IHtmlContainer scope, string name, BindingContextExitBehavior exitBehavior)
        {
            var currentContext = Current;

            if (currentContext != null)
            {
                currentContext.VerifyAccess();
            }

            if (currentContext != null &&
                !currentContext.Scope.Equals(scope) &&
                !currentContext.Scope.DescendantNodes().OfType <IHtmlContainer>().Contains(scope)
                )
            {
                throw new InvalidOperationException();
            }

            var context = new BindingContext(scope, name, exitBehavior);

            context.EnterCore(exitBehavior);
            return(context);
        }