From 091180ceeba8c2300898b2fab95293ae5fff320e Mon Sep 17 00:00:00 2001 From: Eric Sink Date: Thu, 15 Mar 2018 15:37:09 -0500 Subject: [PATCH] progress on XF picker. --- Ooui.Forms/Exports.cs | 1 + Ooui.Forms/PickerRenderer.cs | 87 ++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 Ooui.Forms/PickerRenderer.cs diff --git a/Ooui.Forms/Exports.cs b/Ooui.Forms/Exports.cs index e9c192f..e6e445e 100644 --- a/Ooui.Forms/Exports.cs +++ b/Ooui.Forms/Exports.cs @@ -16,6 +16,7 @@ using Xamarin.Forms; [assembly: ExportRenderer (typeof (Label), typeof (LabelRenderer))] [assembly: ExportRenderer (typeof (LinkLabel), typeof (LinkLabelRenderer))] [assembly: ExportRenderer (typeof (LinkView), typeof (LinkViewRenderer))] +[assembly: ExportRenderer(typeof(Picker), typeof(PickerRenderer))] [assembly: ExportRenderer(typeof(ListView), typeof(ListViewRenderer))] [assembly: ExportRenderer (typeof (ProgressBar), typeof (ProgressBarRenderer))] [assembly: ExportRenderer (typeof (SearchBar), typeof (SearchBarRenderer))] diff --git a/Ooui.Forms/PickerRenderer.cs b/Ooui.Forms/PickerRenderer.cs new file mode 100644 index 0000000..dd4e242 --- /dev/null +++ b/Ooui.Forms/PickerRenderer.cs @@ -0,0 +1,87 @@ +using Ooui.Forms.Extensions; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using Xamarin.Forms; +using Xamarin.Forms.Internals; + +namespace Ooui.Forms.Renderers +{ + public class PickerRenderer : ViewRenderer + { + private bool _disposed; + private Select _select; + + public PickerRenderer() + { + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + if (e.NewElement != null) + { + if (Control == null) + { + _select = new Select(); + _select.Change += _select_Change; + + SetNativeControl(_select); + } + + UpdateItems(); + UpdateBackgroundColor(); + } + + base.OnElementChanged(e); + } + + private void _select_Change(object sender, TargetEventArgs e) + { + Element.SetValueFromRenderer(Picker.SelectedIndexProperty, Element.ItemsSource.IndexOf(_select.Value)); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == Picker.ItemsSourceProperty.PropertyName) + { + UpdateItems(); + } + + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing && !_disposed) + { + _disposed = true; + } + } + + private void UpdateBackgroundColor() + { + var backgroundColor = Element.BackgroundColor.ToOouiColor(); + + _select.Style.BackgroundColor = backgroundColor; + } + + private void UpdateItems() + { + var items = Element.ItemsSource; + + if (items != null) + { + foreach (var item in items) + { + var s = item.ToString(); + _select.AddOption(s, s); + } + } + } + + } + +}