ListBoxPageViewModel.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Linq;
  4. using System.Reactive;
  5. using Avalonia.Controls;
  6. using ReactiveUI;
  7. namespace ControlCatalog.ViewModels
  8. {
  9. public class ListBoxPageViewModel : ReactiveObject
  10. {
  11. private int _counter;
  12. private SelectionMode _selectionMode;
  13. public ListBoxPageViewModel()
  14. {
  15. Items = new ObservableCollection<string>(Enumerable.Range(1, 10000).Select(i => GenerateItem()));
  16. Selection = new SelectionModel();
  17. Selection.Select(1);
  18. AddItemCommand = ReactiveCommand.Create(() => Items.Add(GenerateItem()));
  19. RemoveItemCommand = ReactiveCommand.Create(() =>
  20. {
  21. while (Selection.SelectedItems.Count > 0)
  22. {
  23. Items.Remove((string)Selection.SelectedItems.First());
  24. }
  25. });
  26. SelectRandomItemCommand = ReactiveCommand.Create(() =>
  27. {
  28. var random = new Random();
  29. using (Selection.Update())
  30. {
  31. Selection.ClearSelection();
  32. Selection.Select(random.Next(Items.Count - 1));
  33. }
  34. });
  35. }
  36. public ObservableCollection<string> Items { get; }
  37. public SelectionModel Selection { get; }
  38. public ReactiveCommand<Unit, Unit> AddItemCommand { get; }
  39. public ReactiveCommand<Unit, Unit> RemoveItemCommand { get; }
  40. public ReactiveCommand<Unit, Unit> SelectRandomItemCommand { get; }
  41. public SelectionMode SelectionMode
  42. {
  43. get => _selectionMode;
  44. set
  45. {
  46. Selection.ClearSelection();
  47. this.RaiseAndSetIfChanged(ref _selectionMode, value);
  48. }
  49. }
  50. private string GenerateItem() => $"Item {_counter++.ToString()}";
  51. }
  52. }