Browse Source

Implement functionality for added controls in TreeViewPage.xaml.cs

pull/2694/head
Ivan Kochurkin 7 years ago
parent
commit
6f58bb0e39
  1. 2
      samples/ControlCatalog/Pages/ListBoxPage.xaml.cs
  2. 93
      samples/ControlCatalog/Pages/TreeViewPage.xaml.cs

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

@ -36,7 +36,7 @@ namespace ControlCatalog.Pages
RemoveItemCommand = ReactiveCommand.Create(() =>
{
foreach (string selectedItem in listBox.SelectedItems)
foreach (string selectedItem in _listBox.SelectedItems)
{
Items.Remove(selectedItem);
}

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

@ -1,8 +1,9 @@
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
{
@ -10,8 +11,8 @@ namespace ControlCatalog.Pages
{
public TreeViewPage()
{
this.InitializeComponent();
DataContext = new Node().Children;
InitializeComponent();
DataContext = new PageViewModel(this.Find<TreeView>("treeView"));
}
private void InitializeComponent()
@ -19,22 +20,96 @@ namespace ControlCatalog.Pages
AvaloniaXamlLoader.Load(this);
}
public class Node
private class PageViewModel : ReactiveObject
{
private IList<Node> _children;
private readonly TreeView _treeView;
private SelectionMode _selectionMode;
public PageViewModel(TreeView treeView)
{
_treeView = treeView;
Node root = new Node();
Items = root.Children;
AddItemCommand = ReactiveCommand.Create(() =>
{
Node selectedItem = _treeView.SelectedItems.Count > 0 ? (Node)_treeView.SelectedItems[0] : root;
selectedItem.AddNewItem();
});
RemoveItemCommand = ReactiveCommand.Create(() =>
{
foreach (Node selectedItem in _treeView.SelectedItems)
{
RecursiveRemove(Items, selectedItem);
}
_treeView.SelectedItems.Clear();
bool RecursiveRemove(ObservableCollection<Node> items, Node selectedItem)
{
if (items.Remove(selectedItem))
{
return true;
}
foreach (Node item in items)
{
if (item.AreChildrenInitialized && RecursiveRemove(item.Children, selectedItem))
{
return true;
}
}
return false;
}
});
}
public ObservableCollection<Node> Items { get; }
public ReactiveCommand<Unit, Unit> AddItemCommand { get; }
public ReactiveCommand<Unit, Unit> RemoveItemCommand { get; }
public SelectionMode SelectionMode
{
get => _selectionMode;
set
{
_treeView.SelectedItems.Clear();
this.RaiseAndSetIfChanged(ref _selectionMode, value);
}
}
}
private class Node
{
private int _counter;
private ObservableCollection<Node> _children;
public string Header { get; private set; }
public IList<Node> Children
public bool AreChildrenInitialized => _children != null;
public ObservableCollection<Node> Children
{
get
{
if (_children == null)
{
_children = Enumerable.Range(1, 10).Select(i => new Node() {Header = $"Item {i}"})
.ToArray();
_children = new ObservableCollection<Node>(Enumerable.Range(1, 10).Select(i => CreateNewNode()));
}
return _children;
}
}
public void AddNewItem() => Children.Add(CreateNewNode());
public override string ToString() => Header;
private Node CreateNewNode() => new Node {Header = $"Item {_counter++}"};
}
}
}

Loading…
Cancel
Save