From 4ea528643e8c23c8cde47d312665c6fe08701d6d Mon Sep 17 00:00:00 2001 From: adrianknight89 Date: Wed, 28 Dec 2016 17:15:45 -0600 Subject: fix nre when changing content in datepickerselected (#494) --- .../Bugzilla38723.cs | 58 ++++++++++++++++++++++ .../Xamarin.Forms.Controls.Issues.Shared.projitems | 1 + .../Renderers/PickerRenderer.cs | 2 +- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla38723.cs diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla38723.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla38723.cs new file mode 100644 index 00000000..2defadec --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla38723.cs @@ -0,0 +1,58 @@ +using System; +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 38723, "Update Content in Picker's SelectedIndexChanged event causes NullReferenceException", PlatformAffected.iOS)] + public class Bugzilla38723 : TestContentPage // or TestMasterDetailPage, etc ... + { + Picker _datePicker; + Label _dateLabel; + + protected override void Init() + { + _datePicker = new Picker + { + //HorizontalOptions = LayoutOptions.FillAndExpand, + VerticalOptions = LayoutOptions.Center, + Title = "Pick a Date", + }; + _datePicker.SelectedIndexChanged += DatePickerSelected; + + for (var i = 0; i < 7; i++) + { + _datePicker.Items.Add(DateTime.Now.AddDays(i).ToString("dd, MMM, yyyy(dddd)")); + } + + var stackLayout = new StackLayout + { + Padding = new Thickness(10, 10) + }; + + _dateLabel = new Label + { + HorizontalOptions = LayoutOptions.StartAndExpand, + VerticalOptions = LayoutOptions.Center, + Text = "Placeholder" + }; + + stackLayout.Children.Add(_datePicker); + stackLayout.Children.Add(_dateLabel); + // Update current page's UI would cause NullReferenceException + Content = stackLayout; + } + + void DatePickerSelected(object sender, EventArgs args) + { + _dateLabel.Text = args.ToString(); + Content = _dateLabel; + } + } +} \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 895bcc9c..53ae50ad 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -82,6 +82,7 @@ + Bugzilla38827.xaml Code diff --git a/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs index 5a7fa22d..169ac3ed 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.cs @@ -108,9 +108,9 @@ namespace Xamarin.Forms.Platform.iOS if (Element != null) { var oldText = Control.Text; - ElementController.SetValueFromRenderer(Picker.SelectedIndexProperty, s.SelectedIndex); Control.Text = s.SelectedItem; UpdatePickerNativeSize(oldText); + ElementController.SetValueFromRenderer(Picker.SelectedIndexProperty, s.SelectedIndex); } } -- cgit v1.2.3