|
|
@@ -1,9 +1,9 @@
|
|
|
-using System;
|
|
|
-using System.Collections;
|
|
|
-using System.Collections.Generic;
|
|
|
+using System.Collections.ObjectModel;
|
|
|
using System.Linq;
|
|
|
+using System.Reactive;
|
|
|
using Avalonia.Controls;
|
|
|
using Avalonia.Markup.Xaml;
|
|
|
+using ReactiveUI;
|
|
|
|
|
|
namespace ControlCatalog.Pages
|
|
|
{
|
|
|
@@ -11,9 +11,8 @@ namespace ControlCatalog.Pages
|
|
|
{
|
|
|
public ListBoxPage()
|
|
|
{
|
|
|
- this.InitializeComponent();
|
|
|
- DataContext = Enumerable.Range(1, 10).Select(i => $"Item {i}" )
|
|
|
- .ToArray();
|
|
|
+ InitializeComponent();
|
|
|
+ DataContext = new PageViewModel(this.Find<ListBox>("listBox"));
|
|
|
}
|
|
|
|
|
|
private void InitializeComponent()
|
|
|
@@ -21,5 +20,46 @@ namespace ControlCatalog.Pages
|
|
|
AvaloniaXamlLoader.Load(this);
|
|
|
}
|
|
|
|
|
|
+ private class PageViewModel : ReactiveObject
|
|
|
+ {
|
|
|
+ private readonly ListBox _listBox;
|
|
|
+ private int _counter;
|
|
|
+ private SelectionMode _selectionMode;
|
|
|
+
|
|
|
+ public PageViewModel(ListBox listBox)
|
|
|
+ {
|
|
|
+ _listBox = listBox;
|
|
|
+
|
|
|
+ Items = new ObservableCollection<string>(Enumerable.Range(1, 10).Select(i => GenerateItem()));
|
|
|
+
|
|
|
+ AddItemCommand = ReactiveCommand.Create(() => Items.Add(GenerateItem()));
|
|
|
+
|
|
|
+ RemoveItemCommand = ReactiveCommand.Create(() =>
|
|
|
+ {
|
|
|
+ foreach (string selectedItem in listBox.SelectedItems)
|
|
|
+ {
|
|
|
+ Items.Remove(selectedItem);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public ObservableCollection<string> Items { get; }
|
|
|
+
|
|
|
+ public ReactiveCommand<Unit, Unit> AddItemCommand { get; }
|
|
|
+
|
|
|
+ public ReactiveCommand<Unit, Unit> RemoveItemCommand { get; }
|
|
|
+
|
|
|
+ public SelectionMode SelectionMode
|
|
|
+ {
|
|
|
+ get => _selectionMode;
|
|
|
+ set
|
|
|
+ {
|
|
|
+ _listBox.SelectedItems.Clear();
|
|
|
+ this.RaiseAndSetIfChanged(ref _selectionMode, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string GenerateItem() => $"Item {_counter++}";
|
|
|
+ }
|
|
|
}
|
|
|
}
|