private BindingContext(IHtmlContainer scope, string name, BindingContextExitBehavior exitBehavior) { _scope = scope; _name = name; _thread = Thread.CurrentThread; _exitBehavior = exitBehavior; }
/// <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)); }
/// <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)); }
/// <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); }