12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using System;
- using System.Collections.ObjectModel;
- using System.Linq;
- using Avalonia.Media;
- using MiniMvvm;
- namespace ControlCatalog.ViewModels
- {
- public class ItemsRepeaterPageViewModel : ViewModelBase
- {
- private int _newItemIndex = 1;
- private int _newGenerationIndex = 0;
- private ObservableCollection<ItemsRepeaterPageViewModelItem> _items;
- public ItemsRepeaterPageViewModel()
- {
- _items = CreateItems();
- }
- public ObservableCollection<ItemsRepeaterPageViewModelItem> Items
- {
- get => _items;
- set => this.RaiseAndSetIfChanged(ref _items, value);
- }
- public ItemsRepeaterPageViewModelItem? SelectedItem { get; set; }
- public void AddItem()
- {
- var index = SelectedItem != null ? Items.IndexOf(SelectedItem) : -1;
- Items.Insert(index + 1, new ItemsRepeaterPageViewModelItem(index + 1, $"New Item {_newItemIndex++}"));
- }
- public void RemoveItem()
- {
- if (SelectedItem is not null)
- {
- Items.Remove(SelectedItem);
- SelectedItem = null;
- }
- else if (Items.Count > 0)
- {
- Items.RemoveAt(Items.Count - 1);
- }
- }
- public void RandomizeHeights()
- {
- var random = new Random();
- foreach (var i in Items)
- {
- i.Height = random.Next(240) + 10;
- }
- }
- public void ResetItems()
- {
- Items = CreateItems();
- }
- private ObservableCollection<ItemsRepeaterPageViewModelItem> CreateItems()
- {
- var suffix = _newGenerationIndex == 0 ? string.Empty : $"[{_newGenerationIndex.ToString()}]";
- _newGenerationIndex++;
- return new ObservableCollection<ItemsRepeaterPageViewModelItem>(
- Enumerable.Range(1, 100000).Select(i => new ItemsRepeaterPageViewModelItem(i, $"Item {i.ToString()} {suffix}")));
- }
- }
-
- public class ItemsRepeaterPageViewModelItem : ViewModelBase
- {
- private double _height = double.NaN;
- public ItemsRepeaterPageViewModelItem(int index, string text)
- {
- Index = index;
- Text = text;
- }
- public int Index { get; }
- public string Text { get; }
-
- public double Height
- {
- get => _height;
- set => this.RaiseAndSetIfChanged(ref _height, value);
- }
- }
- }
|