Browse Source

Allow adding items anywhere in list.

By clicking an item in `ItemsRepeater` to select the insertion point.
pull/2813/head
Steven Kirk 7 years ago
parent
commit
fa6505123f
  1. 2
      samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml
  2. 9
      samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml.cs
  3. 5
      samples/ControlCatalog/ViewModels/ItemsRepeaterPageViewModel.cs

2
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml

@ -19,7 +19,7 @@
<ScrollViewer Name="scroller"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<ItemsRepeater Name="repeater" Items="{Binding Items}"/>
<ItemsRepeater Name="repeater" Background="Transparent" Items="{Binding Items}"/>
</ScrollViewer>
</Border>
</DockPanel>

9
samples/ControlCatalog/Pages/ItemsRepeaterPage.xaml.cs

@ -1,6 +1,8 @@
using System;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.Layout;
using Avalonia.Markup.Xaml;
using ControlCatalog.ViewModels;
@ -17,6 +19,7 @@ namespace ControlCatalog.Pages
this.InitializeComponent();
_repeater = this.FindControl<ItemsRepeater>("repeater");
_scroller = this.FindControl<ScrollViewer>("scroller");
_repeater.PointerPressed += RepeaterClick;
DataContext = new ItemsRepeaterPageViewModel();
}
@ -68,5 +71,11 @@ namespace ControlCatalog.Pages
break;
}
}
private void RepeaterClick(object sender, PointerPressedEventArgs e)
{
var item = (e.Source as TextBlock)?.DataContext as string;
((ItemsRepeaterPageViewModel)DataContext).SelectedItem = item;
}
}
}

5
samples/ControlCatalog/ViewModels/ItemsRepeaterPageViewModel.cs

@ -16,9 +16,12 @@ namespace ControlCatalog.ViewModels
public ObservableCollection<string> Items { get; }
public string SelectedItem { get; set; }
public void AddItem()
{
Items.Insert(0, $"New Item {newItemIndex++}");
var index = SelectedItem != null ? Items.IndexOf(SelectedItem) : -1;
Items.Insert(index + 1, $"New Item {newItemIndex++}");
}
}
}

Loading…
Cancel
Save