using System; using System.Collections.Generic; using System.ComponentModel; using Windows.UI.Xaml; using static System.String; #if WINDOWS_UWP namespace Xamarin.Forms.Platform.UWP #else namespace Xamarin.Forms.Platform.WinRT #endif { public static class NativeBindingExtensions { public static void SetBinding(this FrameworkElement view, string propertyName, BindingBase bindingBase, string updateSourceEventName = null) { var binding = bindingBase as Binding; updateSourceEventName = updateSourceEventName ?? binding?.UpdateSourceEventName; if (IsNullOrEmpty(updateSourceEventName)) { NativePropertyListener nativePropertyListener = null; if (bindingBase.Mode == BindingMode.TwoWay) nativePropertyListener = new NativePropertyListener(view, propertyName); NativeBindingHelpers.SetBinding(view, propertyName, bindingBase, nativePropertyListener as INotifyPropertyChanged); return; } NativeEventWrapper eventE = null; if (binding.Mode == BindingMode.TwoWay && !(view is INotifyPropertyChanged)) eventE = new NativeEventWrapper(view, propertyName, updateSourceEventName); NativeBindingHelpers.SetBinding(view, propertyName, binding, eventE); } public static void SetBinding(this FrameworkElement view, BindableProperty targetProperty, BindingBase binding) { NativeBindingHelpers.SetBinding(view, targetProperty, binding); } public static void SetValue(this FrameworkElement target, BindableProperty targetProperty, object value) { NativeBindingHelpers.SetValue(target, targetProperty, value); } public static void SetBindingContext(this FrameworkElement target, object bindingContext, Func> getChildren = null) { NativeBindingHelpers.SetBindingContext(target, bindingContext, getChildren); } internal static void TransferbindablePropertiesToWrapper(this FrameworkElement target, View wrapper) { NativeBindingHelpers.TransferBindablePropertiesToWrapper(target, wrapper); } } }