fix nre when changing content in datepickerselected (#494)
authoradrianknight89 <adrianknight89@outlook.com>
Wed, 28 Dec 2016 23:15:45 +0000 (17:15 -0600)
committerE.Z. Hart <hartez@users.noreply.github.com>
Wed, 28 Dec 2016 23:15:45 +0000 (16:15 -0700)
Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla38723.cs [new file with mode: 0644]
Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
Xamarin.Forms.Platform.iOS/Renderers/PickerRenderer.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 (file)
index 0000000..2defade
--- /dev/null
@@ -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
index 895bcc9..53ae50a 100644 (file)
@@ -82,6 +82,7 @@
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla37863.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla37601.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla38105.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Bugzilla38723.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla38827.xaml.cs">
       <DependentUpon>Bugzilla38827.xaml</DependentUpon>
       <SubType>Code</SubType>
index 5a7fa22..169ac3e 100644 (file)
@@ -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);
                        }
                }