private IList<IMvxUpdateableBinding> GetOrCreateBindingsList(FrameworkElement attachedObject) { var existing = attachedObject.GetValue(BindingsListProperty) as IList<IMvxUpdateableBinding>; if (existing != null) return existing; // attach the list var newList = new List<IMvxUpdateableBinding>(); attachedObject.SetValue(BindingsListProperty, newList); // create a binding watcher for the list #if WINDOWS_WPF var binding = new System.Windows.Data.Binding(); #endif #if WINDOWS_COMMON var binding = new Windows.UI.Xaml.Data.Binding(); #endif bool attached = false; Action attachAction = () => { if (attached) return; BindingOperations.SetBinding(attachedObject, DataContextWatcherProperty, binding); attached = true; }; Action detachAction = () => { if (!attached) return; #if WINDOWS_COMMON attachedObject.ClearValue(DataContextWatcherProperty); #else BindingOperations.ClearBinding(attachedObject, DataContextWatcherProperty); #endif attached = false; }; attachAction(); attachedObject.Loaded += (o, args) => { attachAction(); }; attachedObject.Unloaded += (o, args) => { detachAction(); }; return newList; }
private static void ReplaceCachedLocalValueHelper(FrameworkElement element, DependencyProperty property, object value) { if (value == DependencyProperty.UnsetValue) { element.ClearValue(property); } else { //BindingExpression expression = value as BindingExpression; //if (expression != null) //{ // element.SetBinding(property, expression); //} //else //{ value = ConvertValueToExpectedType(property, value); element.SetValue(property, value); //} } }