// Token: 0x06001C86 RID: 7302 RVA: 0x000860FC File Offset: 0x000842FC
        private void ChooseActiveBindingExpression(DependencyObject target)
        {
            int count = this.MutableBindingExpressions.Count;
            int i;

            for (i = 0; i < count; i++)
            {
                BindingExpressionBase bindingExpressionBase = this.MutableBindingExpressions[i];
                if (bindingExpressionBase.StatusInternal == BindingStatusInternal.Inactive)
                {
                    bindingExpressionBase.Activate();
                }
                if (bindingExpressionBase.StatusInternal == BindingStatusInternal.Active || bindingExpressionBase.UsingFallbackValue)
                {
                    break;
                }
            }
            int num = (i < count) ? i : -1;

            if (num != this._activeIndex)
            {
                int activeIndex = this._activeIndex;
                this._activeIndex = num;
                base.AdoptProperties(this.ActiveBindingExpression);
                WeakDependencySource[] newSources = BindingExpressionBase.CombineSources(-1, this.MutableBindingExpressions, this.AttentiveBindingExpressions, null, null);
                base.ChangeSources(newSources);
                if (num != -1)
                {
                    for (i = activeIndex; i > num; i--)
                    {
                        this.MutableBindingExpressions[i].Deactivate();
                    }
                }
            }
        }
Ejemplo n.º 2
0
        // Re-evaluate the choice of active BindingExpression
        void ChooseActiveBindingExpression(DependencyObject target)
        {
            int i, count = MutableBindingExpressions.Count;

            for (i = 0; i < count; ++i)
            {
                BindingExpressionBase bindExpr = MutableBindingExpressions[i];

                // Try to activate the BindingExpression if it isn't already activate
                if (bindExpr.StatusInternal == BindingStatusInternal.Inactive)
                {
                    bindExpr.Activate();
                }

                if (bindExpr.StatusInternal == BindingStatusInternal.Active || bindExpr.UsingFallbackValue)
                {
                    break;
                }
            }

            int newActiveIndex = (i < count) ? i : NoActiveBindingExpressions;

            // if active changes, adjust state
            if (newActiveIndex != _activeIndex)
            {
                int oldActiveIndex = _activeIndex;
                _activeIndex = newActiveIndex;

                // adopt the properties of the active binding
                AdoptProperties(ActiveBindingExpression);

                // tell the property engine the new list of sources
                WeakDependencySource[] newSources = CombineSources(-1, MutableBindingExpressions, AttentiveBindingExpressions, null);
                ChangeSources(newSources);

                // deactivate BindingExpressions that don't need to be attentive
                // BUG: only those with (StatusInternal == BindingStatusInternal.Active) will be deactivated
                if (newActiveIndex != NoActiveBindingExpressions)
                {
                    for (i = oldActiveIndex; i > newActiveIndex; --i)
                    {
                        MutableBindingExpressions[i].Deactivate();
                    }
                }
            }
        }