diff options
author | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 13:02:25 -0700 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 16:13:41 -0700 |
commit | 17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch) | |
tree | b5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue1851.cs | |
download | xamarin-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.cs | 92 |
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 |