ListBoxPage.xaml.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Linq;
  4. using System.Reactive;
  5. using Avalonia.Controls;
  6. using Avalonia.Markup.Xaml;
  7. using ReactiveUI;
  8. namespace ControlCatalog.Pages
  9. {
  10. public class ListBoxPage : UserControl
  11. {
  12. public ListBoxPage()
  13. {
  14. InitializeComponent();
  15. DataContext = new PageViewModel();
  16. }
  17. private void InitializeComponent()
  18. {
  19. AvaloniaXamlLoader.Load(this);
  20. }
  21. private class PageViewModel : ReactiveObject
  22. {
  23. private int _counter;
  24. private SelectionMode _selectionMode;
  25. public PageViewModel()
  26. {
  27. Items = new ObservableCollection<string>(Enumerable.Range(1, 10000).Select(i => GenerateItem()));
  28. SelectedItems = new ObservableCollection<string>();
  29. AddItemCommand = ReactiveCommand.Create(() => Items.Add(GenerateItem()));
  30. RemoveItemCommand = ReactiveCommand.Create(() =>
  31. {
  32. while (SelectedItems.Count > 0)
  33. {
  34. Items.Remove(SelectedItems[0]);
  35. }
  36. });
  37. SelectRandomItemCommand = ReactiveCommand.Create(() =>
  38. {
  39. var random = new Random();
  40. SelectedItem = Items[random.Next(Items.Count - 1)];
  41. });
  42. }
  43. public ObservableCollection<string> Items { get; }
  44. private string _selectedItem;
  45. public string SelectedItem
  46. {
  47. get { return _selectedItem; }
  48. set { this.RaiseAndSetIfChanged(ref _selectedItem, value); }
  49. }
  50. public ObservableCollection<string> SelectedItems { get; }
  51. public ReactiveCommand<Unit, Unit> AddItemCommand { get; }
  52. public ReactiveCommand<Unit, Unit> RemoveItemCommand { get; }
  53. public ReactiveCommand<Unit, Unit> SelectRandomItemCommand { get; }
  54. public SelectionMode SelectionMode
  55. {
  56. get => _selectionMode;
  57. set
  58. {
  59. SelectedItems.Clear();
  60. this.RaiseAndSetIfChanged(ref _selectionMode, value);
  61. }
  62. }
  63. private string GenerateItem() => $"Item {_counter++.ToString()}";
  64. }
  65. }
  66. }