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))); }
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); }
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); } }
public void AddDeffered(DeferredElement elem) { _deferred.Value.Add(elem); }
private void AddToTrackedElements(DeferredElement element) => _elementsBeingTracked.Add(element);
private bool IsBeingDeferred(DeferredElement element) => _elementsBeingTracked.Contains(element);
private Binding CreateIsFocusedBinding(DeferredElement element) => CreateBinding(element.Element, nameof(IsFocused));
private BindingBase GetExistingBinding(DeferredElement element) => BindingOperations.GetBinding(element.Element, element.DeferredProperty) ?? (BindingBase)BindingOperations.GetMultiBinding(element.Element, element.DeferredProperty);
private Binding CreateDeferredBinding(DeferredElement element) => CreateBinding(element.Element, element.DeferredProperty.Name, BindingMode.OneWay, true, true, UpdateSourceTrigger.PropertyChanged);
private void RestoreOriginalBinding(DeferredElement element) { BindingOperations.ClearBinding(element.Element, DeferredValueProperty); BindingOperations.SetBinding(element.Element, element.DeferredProperty, GetOriginalBinding(element.Element)); }