[iOS] ViewCellRenderer did not set RealCellProperty
authorPaul DiPietro <paul.dipietro@me.com>
Thu, 7 Apr 2016 05:53:52 +0000 (22:53 -0700)
committerJason Smith <jason.smith@xamarin.com>
Thu, 7 Apr 2016 05:53:52 +0000 (22:53 -0700)
In the iOS ViewCellRenderer, GetRealCell in ViewCellPropertyChanged was returning null and passing it to UpdateIsEnabled. SetRealCell was never being called in ViewCellRenderer and the RealCellProperty was never being set.

Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla36955.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/Cells/ViewCellRenderer.cs

diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla36955.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla36955.cs
new file mode 100644 (file)
index 0000000..4f1a8e7
--- /dev/null
@@ -0,0 +1,62 @@
+using System;
+
+using Xamarin.Forms.CustomAttributes;
+#if UITEST
+using Xamarin.UITest;
+using Xamarin.UITest.iOS;
+using Xamarin.UITest.Queries;
+using NUnit.Framework;
+#endif
+
+namespace Xamarin.Forms.Controls.Issues
+{
+       [Preserve(AllMembers = true)]
+       [Issue(IssueTracker.Bugzilla, 36955, "[iOS] ViewCellRenderer.UpdateIsEnabled referencing null object", PlatformAffected.iOS)]
+       public class Bugzilla36955 : TestContentPage
+       {
+               protected override void Init()
+               {
+                       var ts = new TableSection();
+                       var tr = new TableRoot { ts };
+                       var tv = new TableView(tr);
+
+                       var sc = new SwitchCell
+                       {
+                               Text = "Toggle switch; nothing should crash"
+                       };
+
+                       var button = new Button();
+                       button.SetBinding(Button.TextProperty, new Binding("On", source: sc));
+
+                       var vc = new ViewCell
+                       {
+                               View = button
+                       };
+                       vc.SetBinding(IsEnabledProperty, new Binding("On", source: sc));
+
+                       ts.Add(sc);
+                       ts.Add(vc);
+
+                       Content = tv;
+               }
+
+#if UITEST
+               [Test]
+               public void Bugzilla36955Test()
+               {
+                       if (RunningApp is iOSApp)
+                       {
+                               AppResult[] buttonFalse = RunningApp.Query(q => q.Button().Text("False"));
+                               Assert.AreEqual(buttonFalse.Length == 1, true);
+                               RunningApp.Tap(q => q.Class("Switch"));
+                               AppResult[] buttonTrue = RunningApp.Query(q => q.Button().Text("True"));
+                               Assert.AreEqual(buttonTrue.Length == 1, true);
+                       }
+                       else
+                       {
+                               Assert.Inconclusive("Test is only run on iOS.");
+                       }
+               }
+#endif
+       }
+}
index f843a2e..93de60b 100644 (file)
@@ -68,6 +68,7 @@
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla36649.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla36559.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla36171.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Bugzilla36955.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla37462.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla37841.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla37863.cs" />
index b141629..54f3c1e 100644 (file)
@@ -35,6 +35,8 @@ namespace Xamarin.Forms.Platform.iOS
                        viewCell.PropertyChanged += ViewCellPropertyChanged;
                        cell.ViewCell = viewCell;
 
+                       SetRealCell(item, cell);
+
                        WireUpForceUpdateSizeRequested(item, cell, tv);
 
                        UpdateBackground(cell, item);