ItemsRepeaterPageViewModel.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Linq;
  4. using ReactiveUI;
  5. namespace ControlCatalog.ViewModels
  6. {
  7. public class ItemsRepeaterPageViewModel : ReactiveObject
  8. {
  9. private int newItemIndex = 1;
  10. public ItemsRepeaterPageViewModel()
  11. {
  12. Items = new ObservableCollection<Item>(
  13. Enumerable.Range(1, 100000).Select(i => new Item
  14. {
  15. Text = $"Item {i.ToString()}",
  16. }));
  17. }
  18. public ObservableCollection<Item> Items { get; }
  19. public Item SelectedItem { get; set; }
  20. public void AddItem()
  21. {
  22. var index = SelectedItem != null ? Items.IndexOf(SelectedItem) : -1;
  23. Items.Insert(index + 1, new Item { Text = $"New Item {newItemIndex++}" });
  24. }
  25. public void RandomizeHeights()
  26. {
  27. var random = new Random();
  28. foreach (var i in Items)
  29. {
  30. i.Height = random.Next(240) + 10;
  31. }
  32. }
  33. public class Item : ReactiveObject
  34. {
  35. private double _height = double.NaN;
  36. public string Text { get; set; }
  37. public double Height
  38. {
  39. get => _height;
  40. set => this.RaiseAndSetIfChanged(ref _height, value);
  41. }
  42. }
  43. }
  44. }