summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs
diff options
context:
space:
mode:
authorJason Smith <jason.smith@xamarin.com>2016-03-22 13:02:25 -0700
committerJason Smith <jason.smith@xamarin.com>2016-03-22 16:13:41 -0700
commit17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch)
treeb5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs
downloadxamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip
Initial import
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs92
1 files changed, 92 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs
new file mode 100644
index 00000000..608bec6f
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Xamarin.Forms.CustomAttributes;
+
+namespace Xamarin.Forms.Controls.TestCasesPages
+{
+ [Preserve (AllMembers=true)]
+ [Issue (IssueTracker.Github, 1851, "ObservableCollection in ListView gets Index out of range when removing item", PlatformAffected.Android)]
+ public class Issue1851 : ContentPage
+ {
+ public Issue1851 ()
+ {
+ var grouping = new Grouping<string, string>("number", new List<string> { "1", "2", "3", "4", "5", "6", "7", "8", "9" });
+ var groupings = new ObservableCollection<Grouping<string, string>>
+ {
+ new Grouping<string, string>("letters", new List<string> {"a", "b", "c", "d", "e", "f", "g", "h", "i"}),
+ new Grouping<string, string>("colours", new List<string> {"red", "green", "blue", "white", "orange", "purple", "grey", "mauve", "pink"}),
+ grouping,
+ };
+
+ var listview = new ListView
+ {
+ HasUnevenRows = true,
+ IsGroupingEnabled = true,
+ ItemsSource = groupings,
+ ItemTemplate = new DataTemplate(typeof(CellTemplate)),
+ GroupDisplayBinding = new Binding("Key")
+ };
+ var groupbtn = new Button() { Text = "add/remove group" };
+ bool group = true;
+ groupbtn.Clicked += (sender, args) =>
+ {
+ listview.GroupShortNameBinding = new Binding ("Key");
+ if (group)
+ {
+ group = false;
+
+ // ***** Crashes here
+ groupings.Remove(grouping);
+ }
+ else
+ {
+ group = true;
+ groupings.Add(grouping);
+ }
+ };
+
+ Content = new StackLayout
+ {
+ Children =
+ {
+ groupbtn,
+ listview,
+ }
+ };
+ }
+ }
+
+ public class CellTemplate : ViewCell
+ {
+ protected override void OnBindingContextChanged()
+ {
+ base.OnBindingContextChanged();
+
+ var text = BindingContext as string;
+ if (text == null)
+ return;
+
+ View = new Label { Text = text };
+ }
+ }
+
+ public class Grouping<TKey, TElement> : ObservableCollection<TElement>
+ {
+ public Grouping(TKey key, IEnumerable<TElement> items)
+ {
+ Key = key;
+ foreach (var item in items)
+ Items.Add(item);
+ }
+
+ public TKey Key { get; private set; }
+
+
+ }
+}
+ \ No newline at end of file