Browse Source

Fix @Gillibald review notes: get rid of passing control to viewmodel, use binding instead

pull/2694/head
Ivan Kochurkin 7 years ago
parent
commit
df6068604b
  1. 2
      samples/ControlCatalog/Pages/ListBoxPage.xaml
  2. 16
      samples/ControlCatalog/Pages/ListBoxPage.xaml.cs
  3. 2
      samples/ControlCatalog/Pages/TreeViewPage.xaml
  4. 24
      samples/ControlCatalog/Pages/TreeViewPage.xaml.cs

2
samples/ControlCatalog/Pages/ListBoxPage.xaml

@ -10,7 +10,7 @@
HorizontalAlignment="Center"
Spacing="16">
<StackPanel Orientation="Vertical" Spacing="8">
<ListBox x:Name="listBox" Items="{Binding Items}" Width="250" Height="350" SelectionMode="{Binding SelectionMode}"></ListBox>
<ListBox Items="{Binding Items}" SelectedItems="{Binding SelectedItems}" SelectionMode="{Binding SelectionMode}" Width="250" Height="350"></ListBox>
<Button Command="{Binding AddItemCommand}">Add</Button>

16
samples/ControlCatalog/Pages/ListBoxPage.xaml.cs

@ -12,7 +12,7 @@ namespace ControlCatalog.Pages
public ListBoxPage()
{
InitializeComponent();
DataContext = new PageViewModel(this.Find<ListBox>("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<string>(Enumerable.Range(1, 10).Select(i => GenerateItem()));
SelectedItems = new ObservableCollection<string>();
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<string> Items { get; }
public ObservableCollection<string> SelectedItems { get; }
public ReactiveCommand<Unit, Unit> AddItemCommand { get; }
public ReactiveCommand<Unit, Unit> RemoveItemCommand { get; }
@ -54,7 +54,7 @@ namespace ControlCatalog.Pages
get => _selectionMode;
set
{
_listBox.SelectedItems.Clear();
SelectedItems.Clear();
this.RaiseAndSetIfChanged(ref _selectionMode, value);
}
}

2
samples/ControlCatalog/Pages/TreeViewPage.xaml

@ -10,7 +10,7 @@
HorizontalAlignment="Center"
Spacing="16">
<StackPanel Orientation="Vertical" Spacing="8">
<TreeView x:Name="treeView" SelectionMode="{Binding SelectionMode}" Items="{Binding Items}" Width="250" Height="350">
<TreeView Items="{Binding Items}" SelectedItems="{Binding SelectedItems}" SelectionMode="{Binding SelectionMode}" Width="250" Height="350">
<TreeView.ItemTemplate>
<TreeDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Header}"/>

24
samples/ControlCatalog/Pages/TreeViewPage.xaml.cs

@ -12,7 +12,7 @@ namespace ControlCatalog.Pages
public TreeViewPage()
{
InitializeComponent();
DataContext = new PageViewModel(this.Find<TreeView>("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<Node>();
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<Node> items, Node selectedItem)
{
if (items.Remove(selectedItem))
@ -69,6 +67,8 @@ namespace ControlCatalog.Pages
public ObservableCollection<Node> Items { get; }
public ObservableCollection<Node> SelectedItems { get; }
public ReactiveCommand<Unit, Unit> AddItemCommand { get; }
public ReactiveCommand<Unit, Unit> RemoveItemCommand { get; }
@ -78,7 +78,7 @@ namespace ControlCatalog.Pages
get => _selectionMode;
set
{
_treeView.SelectedItems.Clear();
SelectedItems.Clear();
this.RaiseAndSetIfChanged(ref _selectionMode, value);
}
}

Loading…
Cancel
Save