ObservableTeam FindTeam(ObservableSuperTeams teams, Member member) { if (member == null) { return(null); } for (int i = 0; i < teams.Count; i++) { var group = teams[i]; if (group.Contains(member)) { return(group); } } return(null); }
public ObservableGrouping() { Title = "Observable Grouped List"; var buttonStyle = new Style(typeof(Button)) { }; buttonStyle.Setters.Add(new Setter() { Property = Button.HeightRequestProperty, Value = 30 }); buttonStyle.Setters.Add(new Setter() { Property = Button.FontSizeProperty, Value = 10 }); var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } }, ColumnDefinitions = new ColumnDefinitionCollection { new ColumnDefinition(), new ColumnDefinition() } }; var collectionView = new CollectionView { Header = "This is a header", Footer = "Hey, I'm a footer. Look at me!", ItemTemplate = ItemTemplate(), GroupFooterTemplate = GroupFooterTemplate(), GroupHeaderTemplate = GroupHeaderTemplate(), IsGrouped = true, SelectionMode = SelectionMode.Single }; var itemsSource = new ObservableSuperTeams(); collectionView.ItemsSource = itemsSource; var remover = new Button { Text = "Remove Selected", AutomationId = "RemoveItem", Style = buttonStyle }; remover.Clicked += (obj, args) => { var selectedMember = collectionView.SelectedItem as Member; var team = FindTeam(itemsSource, selectedMember); team?.Remove(selectedMember); }; var adder = new Button { Text = "Add After Selected", AutomationId = "AddItem", Style = buttonStyle }; adder.Clicked += (obj, args) => { var selectedMember = collectionView.SelectedItem as Member; var team = FindTeam(itemsSource, selectedMember); if (team == null) { return; } team.Insert(team.IndexOf(selectedMember) + 1, new Member("Spider-Man")); }; AddStuffToGridRow(layout, 0, remover, adder); var replacer = new Button { Text = "Replace Selected", AutomationId = "ReplaceItem", Style = buttonStyle }; replacer.Clicked += (obj, args) => { var selectedMember = collectionView.SelectedItem as Member; var team = FindTeam(itemsSource, selectedMember); if (team == null) { return; } team.Insert(team.IndexOf(selectedMember) + 1, new Member("Spider-Man")); team.Remove(selectedMember); }; var mover = new Button { Text = $"Move Selected To {itemsSource[0].Name}", AutomationId = "MoveItem", Style = buttonStyle }; mover.Clicked += (obj, args) => { var selectedMember = collectionView.SelectedItem as Member; var team = FindTeam(itemsSource, selectedMember); if (team == null || team == itemsSource[0]) { return; } team.Remove(selectedMember); itemsSource[0].Add(selectedMember); }; AddStuffToGridRow(layout, 1, replacer, mover); var groupRemover = new Button { Text = $"Remove {itemsSource[0].Name}", AutomationId = "RemoveGroup", Style = buttonStyle }; groupRemover.Clicked += (obj, args) => { itemsSource?.Remove(itemsSource[0]); if (itemsSource.Count > 0) { groupRemover.Text = $"Remove {itemsSource[0].Name}"; } else { groupRemover.Text = ""; groupRemover.IsEnabled = false; } mover.Text = $"Move Selected To {itemsSource[0].Name}"; }; var groupAdder = new Button { Text = $"Insert New Group at position 2", AutomationId = "AddGroup", Style = buttonStyle }; groupAdder.Clicked += (obj, args) => { itemsSource?.Insert(1, new ObservableTeam("Excalibur", new List <Member>())); }; AddStuffToGridRow(layout, 2, groupRemover, groupAdder); var groupMover = new Button { Text = "Move 3rd Group to 1st", AutomationId = "MoveGroup", Style = buttonStyle }; groupMover.Clicked += (obj, args) => { var group = itemsSource[2]; itemsSource.Remove(group); itemsSource.Insert(0, group); groupRemover.Text = $"Remove {itemsSource[0].Name}"; mover.Text = $"Move Selected To {itemsSource[0].Name}"; }; var groupReplacer = new Button { Text = "Replace 2nd Group", AutomationId = "ReplaceGroup", Style = buttonStyle }; groupReplacer.Clicked += (obj, args) => { var group = itemsSource[1]; itemsSource.Remove(group); itemsSource?.Insert(1, new ObservableTeam("Alpha Flight", new List <Member> { new Member("Guardian"), new Member("Sasquatch"), new Member("Northstar") })); }; AddStuffToGridRow(layout, 3, groupMover, groupReplacer); layout.Children.Add(collectionView); Grid.SetRow(collectionView, 6); Grid.SetColumnSpan(collectionView, 2); Content = layout; }