diff options
Diffstat (limited to 'Xamarin.Forms.Platform.UAP')
3 files changed, 78 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.UAP/NativeBindingService.cs b/Xamarin.Forms.Platform.UAP/NativeBindingService.cs new file mode 100644 index 00000000..e999af2a --- /dev/null +++ b/Xamarin.Forms.Platform.UAP/NativeBindingService.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml; + +#if WINDOWS_UWP +[assembly: Xamarin.Forms.Dependency(typeof(Xamarin.Forms.Platform.UWP.NativeBindingService))] +namespace Xamarin.Forms.Platform.UWP +#else +[assembly: Xamarin.Forms.Dependency(typeof(Xamarin.Forms.Platform.WinRT.NativeBindingService))] +namespace Xamarin.Forms.Platform.WinRT +#endif +{ + public class NativeBindingService : Xaml.INativeBindingService + { + public bool TrySetBinding(object target, string propertyName, BindingBase binding) + { + var view = target as FrameworkElement; + if (view == null) + return false; + if (target.GetType().GetProperty(propertyName)?.GetMethod == null) + return false; + view.SetBinding(propertyName, binding); + return true; + } + + public bool TrySetBinding(object target, BindableProperty property, BindingBase binding) + { + var view = target as FrameworkElement; + if (view == null) + return false; + view.SetBinding(property, binding); + return true; + } + + public bool TrySetValue(object target, BindableProperty property, object value) + { + var view = target as FrameworkElement; + if (view == null) + return false; + view.SetValue(property, value); + return true; + } + } +} diff --git a/Xamarin.Forms.Platform.UAP/NativeValueConverterService.cs b/Xamarin.Forms.Platform.UAP/NativeValueConverterService.cs new file mode 100644 index 00000000..1f0ef68a --- /dev/null +++ b/Xamarin.Forms.Platform.UAP/NativeValueConverterService.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml; + +#if WINDOWS_UWP +[assembly: Xamarin.Forms.Dependency(typeof(Xamarin.Forms.Platform.UWP.NativeValueConverterService))] +namespace Xamarin.Forms.Platform.UWP +#else +[assembly: Xamarin.Forms.Dependency(typeof(Xamarin.Forms.Platform.WinRT.NativeValueConverterService))] +namespace Xamarin.Forms.Platform.WinRT +#endif +{ + public class NativeValueConverterService : Xaml.INativeValueConverterService + { + public bool ConvertTo(object value, Type toType, out object nativeValue) + { + nativeValue = null; + if (typeof(FrameworkElement).IsInstanceOfType(value) && toType.IsAssignableFrom(typeof(View))) + { + nativeValue = ((FrameworkElement)value).ToView(); + return true; + } + return false; + } + } +} diff --git a/Xamarin.Forms.Platform.UAP/Xamarin.Forms.Platform.UAP.csproj b/Xamarin.Forms.Platform.UAP/Xamarin.Forms.Platform.UAP.csproj index 81ec3ff3..4f383064 100644 --- a/Xamarin.Forms.Platform.UAP/Xamarin.Forms.Platform.UAP.csproj +++ b/Xamarin.Forms.Platform.UAP/Xamarin.Forms.Platform.UAP.csproj @@ -189,6 +189,8 @@ <Link>LayoutExtensions.cs</Link> </Compile> <Compile Include="IToolBarForegroundBinder.cs" /> + <Compile Include="NativeBindingService.cs" /> + <Compile Include="NativeValueConverterService.cs" /> <Compile Include="SearchBarRenderer.cs" /> <Compile Include="..\Xamarin.Forms.Platform.WinRT\TextAlignmentToHorizontalAlignmentConverter.cs"> <Link>TextAlignmentToHorizontalAlignmentConverter.cs</Link> |