summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WinRT/NativeBindingExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT/NativeBindingExtensions.cs')
-rw-r--r--Xamarin.Forms.Platform.WinRT/NativeBindingExtensions.cs58
1 files changed, 58 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/NativeBindingExtensions.cs b/Xamarin.Forms.Platform.WinRT/NativeBindingExtensions.cs
new file mode 100644
index 00000000..cc88c87e
--- /dev/null
+++ b/Xamarin.Forms.Platform.WinRT/NativeBindingExtensions.cs
@@ -0,0 +1,58 @@
+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<FrameworkElement, IEnumerable<FrameworkElement>> getChildren = null)
+ {
+ NativeBindingHelpers.SetBindingContext(target, bindingContext, getChildren);
+ }
+
+ internal static void TransferbindablePropertiesToWrapper(this FrameworkElement target, View wrapper)
+ {
+ NativeBindingHelpers.TransferBindablePropertiesToWrapper(target, wrapper);
+ }
+ }
+} \ No newline at end of file