diff --git a/Terminal.Gui/Views/TreeView.cs b/Terminal.Gui/Views/TreeView.cs
index 00d2977ff..4f4d3a02a 100644
--- a/Terminal.Gui/Views/TreeView.cs
+++ b/Terminal.Gui/Views/TreeView.cs
@@ -17,12 +17,6 @@ namespace Terminal.Gui {
///
///
IList Children {get;}
-
- ///
- /// The textual representation to be rendered when your class is visible in the tree
- ///
- ///
- string Text {get;}
}
///
diff --git a/UICatalog/Scenarios/TreeUseCases.cs b/UICatalog/Scenarios/TreeUseCases.cs
new file mode 100644
index 000000000..43cf3cee7
--- /dev/null
+++ b/UICatalog/Scenarios/TreeUseCases.cs
@@ -0,0 +1,139 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Terminal.Gui;
+
+namespace UICatalog.Scenarios {
+ [ScenarioMetadata (Name: "Tree View", Description: "Simple tree view examples")]
+ [ScenarioCategory ("Controls")]
+ class TreeUseCases : Scenario {
+
+ View currentTree;
+
+ public override void Setup ()
+ {
+ Win.Title = this.GetName();
+ Win.Y = 1; // menu
+ Win.Height = Dim.Fill (1); // status bar
+ Top.LayoutSubviews ();
+
+ var menu = new MenuBar (new MenuBarItem [] {
+ new MenuBarItem ("_File", new MenuItem [] {
+ new MenuItem ("_Quit", "", () => Quit()),
+ }),
+ new MenuBarItem ("_Scenarios", new MenuItem [] {
+ new MenuItem ("_Simple Nodes", "", () => LoadSimpleNodes()),
+ new MenuItem ("_Rooms", "", () => LoadRooms()),
+ }),
+ });
+
+ Top.Add (menu);
+
+ var statusBar = new StatusBar (new StatusItem [] {
+ new StatusItem(Key.CtrlMask | Key.Q, "~^Q~ Quit", () => Quit()),
+ });
+
+ Top.Add (statusBar);
+
+ // Start with the most basic use case
+ LoadSimpleNodes();
+ }
+
+ // Your data class
+ private class House : ITreeNode {
+
+
+ // Your properties
+ public string Address {get;set;}
+ public List Rooms {get;set;}
+
+ // ITreeNode member:
+
+ public IList Children => Rooms.Cast().ToList();
+
+ public override string ToString ()
+ {
+ return Address;
+ }
+ }
+ private class Room : ITreeNode{
+
+ public string Name {get;set;}
+
+
+ // Rooms have no sub objects
+ public IList Children => new List();
+
+ public override string ToString ()
+ {
+ return Name;
+ }
+ }
+
+ private void LoadRooms()
+ {
+ var myHouse = new House()
+ {
+ Address = "23 Nowhere Street",
+ Rooms = new List{
+ new Room(){Name = "Ballroom"},
+ new Room(){Name = "Bedroom 1"},
+ new Room(){Name = "Bedroom 2"}
+ }
+ };
+
+ if(currentTree != null)
+ Win.Remove(currentTree);
+
+ var tree = new TreeView()
+ {
+ X = 0,
+ Y = 0,
+ Width = 40,
+ Height = 20
+ };
+
+ Win.Add(tree);
+
+ tree.AddObject(myHouse);
+
+ currentTree = tree;
+ }
+
+ private void Quit ()
+ {
+ Application.RequestStop ();
+ }
+
+ private void LoadSimpleNodes()
+ {
+ if(currentTree != null)
+ Win.Remove(currentTree);
+
+ var tree = new TreeView()
+ {
+ X = 0,
+ Y = 0,
+ Width = 40,
+ Height = 20
+ };
+
+ Win.Add(tree);
+
+ var root1 = new TreeNode("Root1");
+ root1.Children.Add(new TreeNode("Child1.1"));
+ root1.Children.Add(new TreeNode("Child1.2"));
+
+ var root2 = new TreeNode("Root2");
+ root2.Children.Add(new TreeNode("Child2.1"));
+ root2.Children.Add(new TreeNode("Child2.2"));
+
+ tree.AddObject(root1);
+ tree.AddObject(root2);
+
+ currentTree = tree;
+
+ }
+ }
+}
diff --git a/UICatalog/Scenarios/TreeViewFileSystem.cs b/UICatalog/Scenarios/TreeViewFileSystem.cs
index 1a9526be0..775b4d70d 100644
--- a/UICatalog/Scenarios/TreeViewFileSystem.cs
+++ b/UICatalog/Scenarios/TreeViewFileSystem.cs
@@ -7,10 +7,6 @@ using Terminal.Gui;
namespace UICatalog.Scenarios {
[ScenarioMetadata (Name: "TreeViewFileSystem", Description: "Hierarchical file system explorer based on TreeView")]
[ScenarioCategory ("Controls")]
- [ScenarioCategory ("Dialogs")]
- [ScenarioCategory ("Text")]
- [ScenarioCategory ("Dialogs")]
- [ScenarioCategory ("TopLevel")]
class TreeViewFileSystem : Scenario {
///
diff --git a/docfx/articles/treeview.md b/docfx/articles/treeview.md
new file mode 100644
index 000000000..aabdcb5c9
--- /dev/null
+++ b/docfx/articles/treeview.md
@@ -0,0 +1,105 @@
+# Tree View
+
+TreeView is a control for navigating hierarchical objects. It comes in two forms `TreeView` and `TreeView`.
+
+## TreeView
+
+The basic non generic TreeView class is populated by `ITreeNode` objects. The simplest tree you can make would look something like:
+
+
+```csharp
+var tree = new TreeView()
+{
+ X = 0,
+ Y = 0,
+ Width = 40,
+ Height = 20
+};
+
+Win.Add(tree);
+
+var root1 = new TreeNode("Root1");
+root1.Children.Add(new TreeNode("Child1.1"));
+root1.Children.Add(new TreeNode("Child1.2"));
+
+var root2 = new TreeNode("Root2");
+root2.Children.Add(new TreeNode("Child2.1"));
+root2.Children.Add(new TreeNode("Child2.2"));
+
+tree.AddObject(root1);
+tree.AddObject(root2);
+
+```
+
+Having to create a bunch of TreeNode objects can be a pain especially if you already have your own objects e.g. `House`, `Room` etc. There are two ways to use your own classes without having to create nodes manually. Firstly you can implement the `ITreeNode` interface:
+
+
+```
+// Your data class
+private class House : ITreeNode {
+
+
+ // Your properties
+ public string Address {get;set;}
+ public List Rooms {get;set;}
+
+ // ITreeNode member:
+
+ public IList Children => Rooms.Cast().ToList();
+
+ public override string ToString ()
+ {
+ return Address;
+ }
+}
+
+// Your other data class
+private class Room : ITreeNode{
+
+ public string Name {get;set;}
+
+
+ // Rooms have no sub objects
+ public IList Children => new List();
+
+ public override string ToString ()
+ {
+ return Name;
+ }
+}
+
+
+...
+
+// After implementing the interface you can add your objects directly to the tree
+
+var myHouse = new House()
+{
+ Address = "23 Nowhere Street",
+ Rooms = new List{
+ new Room(){Name = "Ballroom"},
+ new Room(){Name = "Bedroom 1"},
+ new Room(){Name = "Bedroom 2"}
+ }
+};
+
+var tree = new TreeView()
+{
+ X = 0,
+ Y = 0,
+ Width = 40,
+ Height = 20
+};
+
+tree.AddObject(myHouse);
+
+
+```
+
+Alternatively you can simply tell the tree how the objects relate to one another by implementing `ITreeBuilder`. This is a good option if you don't have control of the data objects you are working with:
+
+```
+TODO
+```
+
+## TreeView