summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues
diff options
context:
space:
mode:
authorSamantha Houts <samantha@teamredwall.com>2016-07-01 13:51:38 -0700
committerRui Marinho <me@ruimarinho.net>2016-07-01 21:51:38 +0100
commiteb84f968f2fac47c375724465854e58c85e45bee (patch)
tree64d9ded58234602c4bdea1e706db6e0f9ba90c3c /Xamarin.Forms.Controls.Issues
parent128796e6d0c6bc4c48ba3b6de4ca97a33d698724 (diff)
downloadxamarin-forms-eb84f968f2fac47c375724465854e58c85e45bee.tar.gz
xamarin-forms-eb84f968f2fac47c375724465854e58c85e45bee.tar.bz2
xamarin-forms-eb84f968f2fac47c375724465854e58c85e45bee.zip
[All] Crash fixes for ListViews (#243)
* [Controls] Add repro for 42277 * [Android] No crash if GroupHeaderTemplate=null * [Android] Fix DataTemplateSelector crash * [Core] Expose ListProxy on TIL * [iOS] Fix DataTemplateSelector crash * [Win] Fix DataTemplateSelector crash * [Docs] Update docs * [Core] Implement ListProxy explicitly Allows ListProxy property to stay internal. * [Controls] Revert unnecessary change to shproj
Diffstat (limited to 'Xamarin.Forms.Controls.Issues')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42277.cs121
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems1
2 files changed, 122 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42277.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42277.cs
new file mode 100644
index 00000000..1a7624ae
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42277.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Linq;
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+using System.Collections.Generic;
+
+#if UITEST
+using Xamarin.UITest;
+using NUnit.Framework;
+#endif
+
+namespace Xamarin.Forms.Controls
+{
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Bugzilla, 42277, "DataTemplate System.InvalidCastException crash in 2.3.1-pre1")]
+ public class Bugzilla42277 : TestContentPage
+ {
+ const string Success1 = "Success1";
+ const string Success2 = "Success2";
+ const string Success3 = "GroupedSuccess3";
+ const string Success4 = "GroupedSuccess4";
+ const string Success5 = "GroupedSuccess5";
+ const string Success6 = "GroupedSuccess6";
+
+ class MyDataTemplateSelector : DataTemplateSelector
+ {
+ DataTemplate _1Template;
+ DataTemplate _2Template;
+
+ DataTemplate _3Template;
+ DataTemplate _4Template;
+ DataTemplate _5Template;
+ DataTemplate _6Template;
+
+ public MyDataTemplateSelector()
+ {
+ _1Template = new DataTemplate(() =>
+ {
+ return new TextCell { Text = Success1 };
+ });
+
+ _2Template = new DataTemplate(() =>
+ {
+ return new TextCell { Text = Success2 };
+ });
+
+ _3Template = new DataTemplate(() =>
+ {
+ return new TextCell { Text = Success3 };
+ });
+
+ _4Template = new DataTemplate(() =>
+ {
+ return new TextCell { Text = Success4 };
+ });
+
+ _5Template = new DataTemplate(() =>
+ {
+ return new TextCell { Text = Success5 };
+ });
+
+ _6Template = new DataTemplate(() =>
+ {
+ return new TextCell { Text = Success6 };
+ });
+ }
+
+ protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
+ {
+ int number = (int)item;
+ switch (number)
+ {
+ default:
+ case 0: return _1Template;
+ case 1: return _2Template;
+ case 2: return _3Template;
+ case 3: return _4Template;
+ case 4: return _5Template;
+ case 5: return _6Template;
+ }
+ }
+ }
+
+ protected override void Init()
+ {
+ //test non-grouped DTS
+ ListView listView = new ListView(ListViewCachingStrategy.RecycleElement)
+ {
+ ItemsSource = Enumerable.Range(0, 2),
+ ItemTemplate = new MyDataTemplateSelector()
+ };
+
+ //test grouped DTS
+ ListView groupedListView = new ListView(ListViewCachingStrategy.RecycleElement)
+ {
+ ItemsSource = new List<List<int>> { Enumerable.Range(2, 2).ToList(), Enumerable.Range(4, 2).ToList() },
+ IsGroupingEnabled = true,
+ ItemTemplate = new MyDataTemplateSelector()
+ };
+
+ Content = new StackLayout { Children = { listView, groupedListView } };
+
+ //test collection changed
+ listView.ItemsSource = Enumerable.Range(0, 2);
+ groupedListView.ItemsSource = new List<List<int>> { Enumerable.Range(2, 2).ToList(), Enumerable.Range(4, 2).ToList() };
+ }
+
+#if UITEST
+ [Test]
+ public void Bugzilla42277Test()
+ {
+ RunningApp.WaitForElement(q => q.Marked(Success1));
+ RunningApp.WaitForElement(q => q.Marked(Success2));
+ RunningApp.WaitForElement(q => q.Marked(Success3));
+ RunningApp.WaitForElement(q => q.Marked(Success4));
+ RunningApp.WaitForElement(q => q.Marked(Success5));
+ RunningApp.WaitForElement(q => q.Marked(Success6));
+ }
+#endif
+ }
+}
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 919d5062..10e0800c 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
@@ -156,6 +156,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla39853.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TestPages\ScreenshotConditionalApp.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla41842.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42277.cs" />
<Compile Include="$(MSBuildThisFileDirectory)_Template.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue1028.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue1075.cs" />