From 2ea322f54f8bfaf283c9bc02e965d197eef54c27 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 25 May 2016 00:01:24 +0200 Subject: [PATCH] Added "Recreate" button to virtualization test app. --- samples/VirtualizationTest/MainWindow.xaml | 1 + .../ViewModels/ItemViewModel.cs | 6 ++-- .../ViewModels/MainWindowViewModel.cs | 33 +++++++++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/samples/VirtualizationTest/MainWindow.xaml b/samples/VirtualizationTest/MainWindow.xaml index db256a032d..b8fffe6688 100644 --- a/samples/VirtualizationTest/MainWindow.xaml +++ b/samples/VirtualizationTest/MainWindow.xaml @@ -17,6 +17,7 @@ + diff --git a/samples/VirtualizationTest/ViewModels/ItemViewModel.cs b/samples/VirtualizationTest/ViewModels/ItemViewModel.cs index 32acdd4336..75777012c1 100644 --- a/samples/VirtualizationTest/ViewModels/ItemViewModel.cs +++ b/samples/VirtualizationTest/ViewModels/ItemViewModel.cs @@ -8,13 +8,15 @@ namespace VirtualizationTest.ViewModels { internal class ItemViewModel : ReactiveObject { + private string _prefix; private int _index; - public ItemViewModel(int index) + public ItemViewModel(int index, string prefix = "Item") { + _prefix = prefix; _index = index; } - public string Header => $"Item {_index}"; + public string Header => $"{_prefix} {_index}"; } } diff --git a/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs b/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs index 916568f7eb..192182798b 100644 --- a/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs +++ b/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs @@ -10,10 +10,14 @@ namespace VirtualizationTest.ViewModels internal class MainWindowViewModel : ReactiveObject { private int _itemCount = 200; + private IReactiveList _items; + private string _prefix = "Item"; public MainWindowViewModel() { this.WhenAnyValue(x => x.ItemCount).Subscribe(ResizeItems); + RecreateCommand = ReactiveCommand.Create(); + RecreateCommand.Subscribe(_ => Recreate()); } public int ItemCount @@ -22,15 +26,40 @@ namespace VirtualizationTest.ViewModels set { this.RaiseAndSetIfChanged(ref _itemCount, value); } } - public IReactiveList Items { get; private set; } + public IReactiveList Items + { + get { return _items; } + private set { this.RaiseAndSetIfChanged(ref _items, value); } + } + + public ReactiveCommand RecreateCommand { get; private set; } private void ResizeItems(int count) { if (Items == null) { - var items = Enumerable.Range(0, count).Select(x => new ItemViewModel(x)); + var items = Enumerable.Range(0, count) + .Select(x => new ItemViewModel(x)); Items = new ReactiveList(items); } + else if (count > Items.Count) + { + var items = Enumerable.Range(Items.Count, count - Items.Count) + .Select(x => new ItemViewModel(x)); + Items.AddRange(items); + } + else if (count < Items.Count) + { + Items.RemoveRange(count, Items.Count - count - 1); + } + } + + private void Recreate() + { + _prefix = _prefix == "Item" ? "Recreated" : "Item"; + var items = Enumerable.Range(0, _itemCount) + .Select(x => new ItemViewModel(x, _prefix)); + Items = new ReactiveList(items); } } }