Browse Source

Add "Scroll to Selected" and "Remove Item" to control catalog items repeater

Jade Macho 3 years ago
parent
commit
c8f2548f05

+ 2 - 0
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml

@@ -53,10 +53,12 @@
         <ComboBoxItem>UniformGrid - Horizontal</ComboBoxItem>
       </ComboBox>
       <Button Command="{Binding AddItem}">Add Item</Button>
+      <Button Command="{Binding RemoveItem}">Remove Item</Button>
       <Button Command="{Binding RandomizeHeights}">Randomize Heights</Button>
       <Button Command="{Binding ResetItems}">Reset items</Button>
       <Button x:Name="scrollToLast">Scroll to Last</Button>
       <Button x:Name="scrollToRandom">Scroll to Random</Button>
+      <Button x:Name="scrollToSelected">Scroll to Selected</Button>
     </StackPanel>
     <Border BorderThickness="1" BorderBrush="{DynamicResource SystemControlHighlightBaseMediumLowBrush}" Margin="0 0 0 16">
       <ScrollViewer Name="scroller"

+ 10 - 0
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml.cs

@@ -15,8 +15,10 @@ namespace ControlCatalog.Pages
         private readonly ItemsRepeaterPageViewModel _viewModel;
         private ItemsRepeater _repeater;
         private ScrollViewer _scroller;
+        private int _selectedIndex;
         private Button _scrollToLast;
         private Button _scrollToRandom;
+        private Button _scrollToSelected;
         private Random _random = new Random(0);
 
         public ItemsRepeaterPage()
@@ -26,10 +28,12 @@ namespace ControlCatalog.Pages
             _scroller = this.FindControl<ScrollViewer>("scroller");
             _scrollToLast = this.FindControl<Button>("scrollToLast");
             _scrollToRandom = this.FindControl<Button>("scrollToRandom");
+            _scrollToSelected = this.FindControl<Button>("scrollToSelected");
             _repeater.PointerPressed += RepeaterClick;
             _repeater.KeyDown += RepeaterOnKeyDown;
             _scrollToLast.Click += scrollToLast_Click;
             _scrollToRandom.Click += scrollToRandom_Click;
+            _scrollToSelected.Click += scrollToSelected_Click;
             DataContext = _viewModel = new ItemsRepeaterPageViewModel();
         }
 
@@ -121,6 +125,7 @@ namespace ControlCatalog.Pages
         {
             var item = (e.Source as TextBlock)?.DataContext as ItemsRepeaterPageViewModel.Item;
             _viewModel.SelectedItem = item;
+            _selectedIndex = _viewModel.Items.IndexOf(item);
         }
 
         private void RepeaterOnKeyDown(object sender, KeyEventArgs e)
@@ -140,5 +145,10 @@ namespace ControlCatalog.Pages
         {
             ScrollTo(_random.Next(_viewModel.Items.Count - 1));
         }
+
+        private void scrollToSelected_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
+        {
+            ScrollTo(_selectedIndex);
+        }
     }
 }

+ 13 - 0
samples/ControlCatalog/ViewModels/ItemsRepeaterPageViewModel.cs

@@ -31,6 +31,19 @@ namespace ControlCatalog.ViewModels
             Items.Insert(index + 1, new Item(index + 1) { Text = $"New Item {_newItemIndex++}" });
         }
 
+        public void RemoveItem()
+        {
+            if (SelectedItem is not null)
+            {
+                Items.Remove(SelectedItem);
+                SelectedItem = null;
+            }
+            else if (Items.Count > 0)
+            {
+                Items.RemoveAt(Items.Count - 1);
+            }
+        }
+
         public void RandomizeHeights()
         {
             var random = new Random();