From df6068604b69270f14c785465a7a703e9da3ed73 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Sat, 29 Jun 2019 23:10:13 +0300 Subject: [PATCH] Fix @Gillibald review notes: get rid of passing control to viewmodel, use binding instead --- samples/ControlCatalog/Pages/ListBoxPage.xaml | 2 +- .../ControlCatalog/Pages/ListBoxPage.xaml.cs | 16 ++++++------- .../ControlCatalog/Pages/TreeViewPage.xaml | 2 +- .../ControlCatalog/Pages/TreeViewPage.xaml.cs | 24 +++++++++---------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/samples/ControlCatalog/Pages/ListBoxPage.xaml b/samples/ControlCatalog/Pages/ListBoxPage.xaml index e7c81a28d4..49e9aafc4a 100644 --- a/samples/ControlCatalog/Pages/ListBoxPage.xaml +++ b/samples/ControlCatalog/Pages/ListBoxPage.xaml @@ -10,7 +10,7 @@ HorizontalAlignment="Center" Spacing="16"> - + diff --git a/samples/ControlCatalog/Pages/ListBoxPage.xaml.cs b/samples/ControlCatalog/Pages/ListBoxPage.xaml.cs index d6d48cd030..8a67766c76 100644 --- a/samples/ControlCatalog/Pages/ListBoxPage.xaml.cs +++ b/samples/ControlCatalog/Pages/ListBoxPage.xaml.cs @@ -12,7 +12,7 @@ namespace ControlCatalog.Pages public ListBoxPage() { InitializeComponent(); - DataContext = new PageViewModel(this.Find("listBox")); + DataContext = new PageViewModel(); } private void InitializeComponent() @@ -22,29 +22,29 @@ namespace ControlCatalog.Pages private class PageViewModel : ReactiveObject { - private readonly ListBox _listBox; private int _counter; private SelectionMode _selectionMode; - public PageViewModel(ListBox listBox) + public PageViewModel() { - _listBox = listBox; - Items = new ObservableCollection(Enumerable.Range(1, 10).Select(i => GenerateItem())); + SelectedItems = new ObservableCollection(); AddItemCommand = ReactiveCommand.Create(() => Items.Add(GenerateItem())); RemoveItemCommand = ReactiveCommand.Create(() => { - foreach (string selectedItem in _listBox.SelectedItems) + while (SelectedItems.Count > 0) { - Items.Remove(selectedItem); + Items.Remove(SelectedItems[0]); } }); } public ObservableCollection Items { get; } + public ObservableCollection SelectedItems { get; } + public ReactiveCommand AddItemCommand { get; } public ReactiveCommand RemoveItemCommand { get; } @@ -54,7 +54,7 @@ namespace ControlCatalog.Pages get => _selectionMode; set { - _listBox.SelectedItems.Clear(); + SelectedItems.Clear(); this.RaiseAndSetIfChanged(ref _selectionMode, value); } } diff --git a/samples/ControlCatalog/Pages/TreeViewPage.xaml b/samples/ControlCatalog/Pages/TreeViewPage.xaml index 1b01a38c60..3a81e2ed02 100644 --- a/samples/ControlCatalog/Pages/TreeViewPage.xaml +++ b/samples/ControlCatalog/Pages/TreeViewPage.xaml @@ -10,7 +10,7 @@ HorizontalAlignment="Center" Spacing="16"> - + diff --git a/samples/ControlCatalog/Pages/TreeViewPage.xaml.cs b/samples/ControlCatalog/Pages/TreeViewPage.xaml.cs index cf6aa50db7..1f35f05f1d 100644 --- a/samples/ControlCatalog/Pages/TreeViewPage.xaml.cs +++ b/samples/ControlCatalog/Pages/TreeViewPage.xaml.cs @@ -12,7 +12,7 @@ namespace ControlCatalog.Pages public TreeViewPage() { InitializeComponent(); - DataContext = new PageViewModel(this.Find("treeView")); + DataContext = new PageViewModel(); } private void InitializeComponent() @@ -22,31 +22,29 @@ namespace ControlCatalog.Pages private class PageViewModel : ReactiveObject { - private readonly TreeView _treeView; private SelectionMode _selectionMode; - public PageViewModel(TreeView treeView) + public PageViewModel() { - _treeView = treeView; - Node root = new Node(); Items = root.Children; + SelectedItems = new ObservableCollection(); AddItemCommand = ReactiveCommand.Create(() => { - Node selectedItem = _treeView.SelectedItems.Count > 0 ? (Node)_treeView.SelectedItems[0] : root; - selectedItem.AddNewItem(); + Node parentItem = SelectedItems.Count > 0 ? SelectedItems[0] : root; + parentItem.AddNewItem(); }); RemoveItemCommand = ReactiveCommand.Create(() => { - foreach (Node selectedItem in _treeView.SelectedItems) + while (SelectedItems.Count > 0) { - RecursiveRemove(Items, selectedItem); + Node lastItem = SelectedItems[0]; + RecursiveRemove(Items, lastItem); + SelectedItems.Remove(lastItem); } - _treeView.SelectedItems.Clear(); - bool RecursiveRemove(ObservableCollection items, Node selectedItem) { if (items.Remove(selectedItem)) @@ -69,6 +67,8 @@ namespace ControlCatalog.Pages public ObservableCollection Items { get; } + public ObservableCollection SelectedItems { get; } + public ReactiveCommand AddItemCommand { get; } public ReactiveCommand RemoveItemCommand { get; } @@ -78,7 +78,7 @@ namespace ControlCatalog.Pages get => _selectionMode; set { - _treeView.SelectedItems.Clear(); + SelectedItems.Clear(); this.RaiseAndSetIfChanged(ref _selectionMode, value); } }