コード例 #1
0
        private bool IsQualifiedForDeferrer(DeferredElement element)
        {
            var binding      = BindingOperations.GetBinding(element.Element, element.DeferredProperty);
            var multiBinding = BindingOperations.GetMultiBinding(element.Element, element.DeferredProperty);

            return(null != binding && !DisallowedBindings.Contains(binding.Mode) ||
                   (null != multiBinding && !DisallowedBindings.Contains(multiBinding.Mode)));
        }
コード例 #2
0
        private void SetDeferringBinding(DeferredElement element)
        {
            SetOriginalBinding(element.Element, GetExistingBinding(element));

            var value = element.GetValue();

            BindingOperations.ClearBinding(element.Element, element.DeferredProperty);

            BindingOperations.SetBinding(element.Element, element.DeferredProperty, CreateDeferredBinding(element));

            //TODO: Check if need both
            element.Element.SetValue(DeferredValueProperty, value);
            element.SetValue(value);
        }
コード例 #3
0
        private void SubmitDeferredValue(DeferredElement element)
        {
            var value = element.GetValue();

            RestoreOriginalBinding(element);

            var expression = BindingOperations.GetBindingExpression(element.Element, element.DeferredProperty);

            element.SetValue(value);

            expression?.UpdateSource();

            //TODO: Check if this condiction is needed
            if (ElementsInFocus)
            {
                SetDeferringBinding(element);
            }
        }
コード例 #4
0
 public void AddDeffered(DeferredElement elem)
 {
     _deferred.Value.Add(elem);
 }
コード例 #5
0
 private void AddToTrackedElements(DeferredElement element)
 => _elementsBeingTracked.Add(element);
コード例 #6
0
 private bool IsBeingDeferred(DeferredElement element)
 => _elementsBeingTracked.Contains(element);
コード例 #7
0
 private Binding CreateIsFocusedBinding(DeferredElement element)
 => CreateBinding(element.Element, nameof(IsFocused));
コード例 #8
0
 private BindingBase GetExistingBinding(DeferredElement element)
 => BindingOperations.GetBinding(element.Element, element.DeferredProperty) ??
 (BindingBase)BindingOperations.GetMultiBinding(element.Element, element.DeferredProperty);
コード例 #9
0
 private Binding CreateDeferredBinding(DeferredElement element)
 => CreateBinding(element.Element, element.DeferredProperty.Name, BindingMode.OneWay, true, true, UpdateSourceTrigger.PropertyChanged);
コード例 #10
0
        private void RestoreOriginalBinding(DeferredElement element)
        {
            BindingOperations.ClearBinding(element.Element, DeferredValueProperty);

            BindingOperations.SetBinding(element.Element, element.DeferredProperty, GetOriginalBinding(element.Element));
        }