A hierarchical data structure is any set of nested business objects that have a structure where the children of a node are in a childre__n field. Parents and children can be different object types. When working with hierarchical data structures, the control's ItemsSource property contains only data items that correspond to root nodes. The TreeListView provides two approaches (tree derivation modes) allowing you to specify where a data object's child items come from. This can be done using Hierarchical Data Templates or in code-behind via a Child Nodes Selector.This example shows how to build a tree in code-behind. The CustomChildrenSelector class implements DevExpress.Xpf.Grid.IChildNodeSelector and returns the list/collection of child nodes for the specified node. This selector is assigned to the TreeListView's ChildNodesSelector property. The TreeListView's TreeDerivationMode property should be set to ChildNodesSelector.
using System;
using System.Collections.ObjectModel;
using System.Collections;
using DevExpress.Xpf.Grid;
namespace HierarchicalDataBinding {
public class ViewModel {
public ObservableCollection<ProjectObject> DataItems { get; set; }
public ViewModel() {
DataItems = InitData();
}
private ObservableCollection<ProjectObject> InitData() {
ObservableCollection<ProjectObject> projects = new ObservableCollection<ProjectObject>();
ProjectObject betaronProject = new ProjectObject() { Name = "Project: Betaron", Stages = new ObservableCollection<ProjectStage>() };
ProjectObject stantoneProject = new ProjectObject() { Name = "Project: Stanton", Stages = new ObservableCollection<ProjectStage>() };
InitBetaronProjectData(betaronProject);
InitStantoneProjectData(stantoneProject);
projects.Add(betaronProject);
projects.Add(stantoneProject);
return projects;
}
void InitBetaronProjectData(ProjectObject betaronProject) {
betaronProject.Executor = "Mcfadyen Ball";
ProjectStage stage21 = new ProjectStage() { Name = "Information Gathering", Executor = "Kaiden Savastano", Tasks = new ObservableCollection<Task>() };
stage21.Tasks.Add(new Task() { Name = "Market research", Executor = "Carmine Then", StartDate = new DateTime(2011, 10, 1), EndDate = new DateTime(2011, 10, 5), State = States.DataSource[2] });
stage21.Tasks.Add(new Task() { Name = "Making specification", Executor = "Seto Kober", StartDate = new DateTime(2011, 10, 5), EndDate = new DateTime(2011, 10, 10), State = States.DataSource[1] });
ProjectStage stage22 = new ProjectStage() { Name = "Planning", Executor = "Manley Difrancesco", Tasks = new ObservableCollection<Task>() };
stage22.Tasks.Add(new Task() { Name = "Documentation", Executor = "Martez Gollin", StartDate = new DateTime(2011, 10, 15), EndDate = new DateTime(2011, 10, 16), State = States.DataSource[0] });
ProjectStage stage23 = new ProjectStage() { Name = "Design", Executor ="Clint Mary", Tasks = new ObservableCollection<Task>() };
stage23.Tasks.Add(new Task() { Name = "Design of a web pages", Executor = "Gasper Hartsell", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[0] });
stage23.Tasks.Add(new Task() { Name = "Pages layout", Executor = "Shirish Huminski", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[0] });
ProjectStage stage24 = new ProjectStage() { Name = "Development", Executor = "Edwin Thone", Tasks = new ObservableCollection<Task>() };
stage24.Tasks.Add(new Task() { Name = "Design", Executor = "Zarko Knill", StartDate = new DateTime(2011, 10, 27), EndDate = new DateTime(2011, 10, 28), State = States.DataSource[0] });
stage24.Tasks.Add(new Task() { Name = "Coding", Executor = "Harley Kirckof", StartDate = new DateTime(2011, 10, 29), EndDate = new DateTime(2011, 10, 30), State = States.DataSource[0] });
ProjectStage stage25 = new ProjectStage() { Name = "Testing and Delivery", Executor ="Boucher Hislop", Tasks = new ObservableCollection<Task>() };
stage25.Tasks.Add(new Task() { Name = "Testing", Executor = "Sarah Ragas", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[0] });
stage25.Tasks.Add(new Task() { Name = "Content", Executor = "Rashid Terinoni", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[0] });
betaronProject.Stages.Add(stage21);
betaronProject.Stages.Add(stage22);
betaronProject.Stages.Add(stage23);
betaronProject.Stages.Add(stage24);
betaronProject.Stages.Add(stage25);
}
void InitStantoneProjectData(ProjectObject stantoneProject) {
stantoneProject.Executor = "Ruben Ackerman";
ProjectStage stage11 = new ProjectStage() { Name = "Information Gathering", Executor = "Huyen Trinklein", Tasks = new ObservableCollection<Task>() };
stage11.Tasks.Add(new Task() { Name = "Market research", Executor = "Tanner Crittendon", StartDate = new DateTime(2011, 10, 1), EndDate = new DateTime(2011, 10, 5), State = States.DataSource[2] });
stage11.Tasks.Add(new Task() { Name = "Making specification", Executor = "Carmine Then", StartDate = new DateTime(2011, 10, 5), EndDate = new DateTime(2011, 10, 10), State = States.DataSource[2] });
ProjectStage stage12 = new ProjectStage() { Name = "Planning", Executor = "Alfredo Sookoo", Tasks = new ObservableCollection<Task>() };
stage12.Tasks.Add(new Task() { Name = "Documentation", Executor = "Gorf Wobbe", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[2] });
ProjectStage stage13 = new ProjectStage() { Name = "Design", Executor = "Saphire Plump", Tasks = new ObservableCollection<Task>() };
stage13.Tasks.Add(new Task() { Name = "Design of a web pages", Executor = "Dominic Minden", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[1] });
stage13.Tasks.Add(new Task() { Name = "Pages layout", Executor = "Pinkerton Trezise", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[1] });
ProjectStage stage14 = new ProjectStage() { Name = "Development", Executor = "Lauren Partain", Tasks = new ObservableCollection<Task>() };
stage14.Tasks.Add(new Task() { Name = "Design", Executor = "Delilah Beamer", StartDate = new DateTime(2011, 10, 23), EndDate = new DateTime(2011, 10, 24), State = States.DataSource[1] });
stage14.Tasks.Add(new Task() { Name = "Coding", Executor = "Dunaway Dupriest", StartDate = new DateTime(2011, 10, 25), EndDate = new DateTime(2011, 10, 26), State = States.DataSource[0] });
ProjectStage stage15 = new ProjectStage() { Name = "Testing and Delivery", Executor = "Christos Arrant", Tasks = new ObservableCollection<Task>() };
stage15.Tasks.Add(new Task() { Name = "Testing", Executor = "Grice Ohora", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[0] });
stage15.Tasks.Add(new Task() { Name = "Content", Executor = "Christos Arrant", StartDate = new DateTime(2011, 10, 13), EndDate = new DateTime(2011, 10, 14), State = States.DataSource[0] });
stantoneProject.Stages.Add(stage11);
stantoneProject.Stages.Add(stage12);
stantoneProject.Stages.Add(stage13);
stantoneProject.Stages.Add(stage14);
stantoneProject.Stages.Add(stage15);
}
}
}
<UserControl x:Class="HierarchicalDataBinding.SL.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:local="clr-namespace:HierarchicalDataBinding"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<ResourceDictionary>
<local:ViewModel x:Key="viewModel" />
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<dxg:TreeListControl x:Name="treeList" ItemsSource="{Binding DataItems}" DataContext="{StaticResource viewModel}">
<dxg:TreeListControl.Resources>
<local:CustomChildrenSelector x:Key="childrenSelector"/>
</dxg:TreeListControl.Resources>
<dxg:TreeListControl.Columns>
<dxg:TreeListColumn FieldName="Name" AllowSorting="True" />
<dxg:TreeListColumn FieldName="Executor" AllowSorting="True" />
<dxg:TreeListColumn FieldName="State" AllowSorting="True" />
</dxg:TreeListControl.Columns>
<dxg:TreeListControl.View>
<dxg:TreeListView x:Name="view" TreeDerivationMode="ChildNodesSelector"
ChildNodesSelector="{StaticResource childrenSelector}" />
</dxg:TreeListControl.View>
</dxg:TreeListControl>
</Grid>
</UserControl>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Collections;
using System.Xml.Serialization;
using System.Reflection;
using System.Windows.Media.Imaging;
using System.Windows.Media;
namespace HierarchicalDataBinding {
public class BaseObject : INotifyPropertyChanged {
string nameCore;
public string Name {
get { return nameCore; }
set {
if (Name == value)
return;
nameCore = value;
OnPropertyChanged("Name");
}
}
String executorCore;
public String Executor {
get { return executorCore; }
set {
if (ReferenceEquals(Executor, value))
return;
executorCore = value;
OnPropertyChanged("Executor");
}
}
State stateCore;
public State State{
get { return stateCore; }
set {
if (ReferenceEquals(State, value))
return;
stateCore = value;
OnPropertyChanged("State");
}
}
public override string ToString() {
return Name;
}
protected void OnPropertyChanged(string propertyName) {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class ProjectObject : BaseObject {
public ObservableCollection<ProjectStage> Stages { get; set; }
}
public class ProjectStage : BaseObject {
public ObservableCollection<Task> Tasks { get; set; }
}
public class Task : BaseObject {
DateTime startDateCore;
public DateTime StartDate {
get { return startDateCore; }
set {
if (StartDate == value)
return;
startDateCore = value;
OnPropertyChanged("StartDate");
}
}
DateTime endDateCore;
public DateTime EndDate {
get { return endDateCore; }
set {
if (EndDate == value)
return;
endDateCore = value;
OnPropertyChanged("EndDate");
}
}
}
public class State : IComparable {
public string TextValue { get; set; }
public int StateValue { get; set; }
public override string ToString() {
return TextValue;
}
public int CompareTo(object obj) {
return Comparer<int>.Default.Compare(StateValue, ((State)obj).StateValue);
}
}
public class States {
static List<State> src;
public static List<State> DataSource {
get {
if (src == null) {
src = new List<State>();
src.Add(new State() { TextValue = "Not started", StateValue = 0});
src.Add(new State() { TextValue = "In progress", StateValue = 1});
src.Add(new State() { TextValue = "Completed", StateValue = 2 });
}
return src;
}
}
}
}
using System.Windows;
namespace HierarchicalDataBinding {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DevExpress.Xpf.Grid;
using System.Collections;
namespace HierarchicalDataBinding {
public class CustomChildrenSelector : IChildNodesSelector {
public IEnumerable SelectChildren(object item) {
if(item is Task)
return null;
else if(item is ProjectStage)
return (item as ProjectStage).Tasks;
else if(item is ProjectObject)
return (item as ProjectObject).Stages;
return null;
}
}
}
<Window x:Class="HierarchicalDataBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:local="clr-namespace:HierarchicalDataBinding"
Title="MainWindow" Height="450" Width="700">
<Window.Resources>
<ResourceDictionary>
<local:ViewModel x:Key="viewModel" />
</ResourceDictionary>
</Window.Resources>
<Grid>
<dxg:TreeListControl x:Name="treeList" ItemsSource="{Binding DataItems}" DataContext="{StaticResource viewModel}">
<dxg:TreeListControl.Resources>
<local:CustomChildrenSelector x:Key="childrenSelector"/>
</dxg:TreeListControl.Resources>
<dxg:TreeListControl.Columns>
<dxg:TreeListColumn FieldName="Name" AllowSorting="True" />
<dxg:TreeListColumn FieldName="Executor" AllowSorting="True" />
<dxg:TreeListColumn FieldName="State" AllowSorting="True" />
</dxg:TreeListControl.Columns>
<dxg:TreeListControl.View>
<dxg:TreeListView x:Name="view" TreeDerivationMode="ChildNodesSelector"
ChildNodesSelector="{StaticResource childrenSelector}"/>
</dxg:TreeListControl.View>
</dxg:TreeListControl>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace HierarchicalDataBinding.SL {
public partial class MainPage : UserControl {
public MainPage() {
InitializeComponent();
}
}
}
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Net
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Namespace HierarchicalDataBinding.SL
Partial Public Class MainPage
Inherits UserControl
Public Sub New()
InitializeComponent()
End Sub
End Class
End Namespace
Imports Microsoft.VisualBasic
Imports System.Windows
Namespace HierarchicalDataBinding
Partial Public Class MainWindow
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
End Class
End Namespace
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.Collections
Imports System.Xml.Serialization
Imports System.Reflection
Imports System.Windows.Media.Imaging
Imports System.Windows.Media
Namespace HierarchicalDataBinding
Public Class BaseObject
Implements INotifyPropertyChanged
Private nameCore As String
Public Property Name() As String
Get
Return nameCore
End Get
Set(ByVal value As String)
If Name = value Then
Return
End If
nameCore = value
OnPropertyChanged("Name")
End Set
End Property
Private executorCore As String
Public Property Executor() As String
Get
Return executorCore
End Get
Set(ByVal value As String)
If ReferenceEquals(Executor, value) Then
Return
End If
executorCore = value
OnPropertyChanged("Executor")
End Set
End Property
Private stateCore As State
Public Property State() As State
Get
Return stateCore
End Get
Set(ByVal value As State)
If ReferenceEquals(State, value) Then
Return
End If
stateCore = value
OnPropertyChanged("State")
End Set
End Property
Public Overrides Function ToString() As String
Return Name
End Function
Protected Sub OnPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
End Class
Public Class ProjectObject
Inherits BaseObject
Private privateStages As ObservableCollection(Of ProjectStage)
Public Property Stages() As ObservableCollection(Of ProjectStage)
Get
Return privateStages
End Get
Set(ByVal value As ObservableCollection(Of ProjectStage))
privateStages = value
End Set
End Property
End Class
Public Class ProjectStage
Inherits BaseObject
Private privateTasks As ObservableCollection(Of Task)
Public Property Tasks() As ObservableCollection(Of Task)
Get
Return privateTasks
End Get
Set(ByVal value As ObservableCollection(Of Task))
privateTasks = value
End Set
End Property
End Class
Public Class Task
Inherits BaseObject
Private startDateCore As DateTime
Public Property StartDate() As DateTime
Get
Return startDateCore
End Get
Set(ByVal value As DateTime)
If StartDate = value Then
Return
End If
startDateCore = value
OnPropertyChanged("StartDate")
End Set
End Property
Private endDateCore As DateTime
Public Property EndDate() As DateTime
Get
Return endDateCore
End Get
Set(ByVal value As DateTime)
If EndDate = value Then
Return
End If
endDateCore = value
OnPropertyChanged("EndDate")
End Set
End Property
End Class
Public Class State
Implements IComparable
Private privateTextValue As String
Public Property TextValue() As String
Get
Return privateTextValue
End Get
Set(ByVal value As String)
privateTextValue = value
End Set
End Property
Private privateStateValue As Integer
Public Property StateValue() As Integer
Get
Return privateStateValue
End Get
Set(ByVal value As Integer)
privateStateValue = value
End Set
End Property
Public Overrides Function ToString() As String
Return TextValue
End Function
Public Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo
Return Comparer(Of Integer).Default.Compare(StateValue, (CType(obj, State)).StateValue)
End Function
End Class
Public Class States
Private Shared src As List(Of State)
Public Shared ReadOnly Property DataSource() As List(Of State)
Get
If src Is Nothing Then
src = New List(Of State)()
src.Add(New State() With {.TextValue = "Not started", .StateValue = 0})
src.Add(New State() With {.TextValue = "In progress", .StateValue = 1})
src.Add(New State() With {.TextValue = "Completed", .StateValue = 2})
End If
Return src
End Get
End Property
End Class
End Namespace
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.ObjectModel
Imports System.Collections
Imports DevExpress.Xpf.Grid
Namespace HierarchicalDataBinding
Public Class ViewModel
Private privateDataItems As ObservableCollection(Of ProjectObject)
Public Property DataItems() As ObservableCollection(Of ProjectObject)
Get
Return privateDataItems
End Get
Set(ByVal value As ObservableCollection(Of ProjectObject))
privateDataItems = value
End Set
End Property
Public Sub New()
DataItems = InitData()
End Sub
Private Function InitData() As ObservableCollection(Of ProjectObject)
Dim projects As New ObservableCollection(Of ProjectObject)()
Dim betaronProject As New ProjectObject() With {.Name = "Project: Betaron", .Stages = New ObservableCollection(Of ProjectStage)()}
Dim stantoneProject As New ProjectObject() With {.Name = "Project: Stanton", .Stages = New ObservableCollection(Of ProjectStage)()}
InitBetaronProjectData(betaronProject)
InitStantoneProjectData(stantoneProject)
projects.Add(betaronProject)
projects.Add(stantoneProject)
Return projects
End Function
Private Sub InitBetaronProjectData(ByVal betaronProject As ProjectObject)
betaronProject.Executor = "Mcfadyen Ball"
Dim stage21 As New ProjectStage() With {.Name = "Information Gathering", .Executor = "Kaiden Savastano", .Tasks = New ObservableCollection(Of Task)()}
stage21.Tasks.Add(New Task() With {.Name = "Market research", .Executor = "Carmine Then", .StartDate = New DateTime(2011, 10, 1), .EndDate = New DateTime(2011, 10, 5), .State = States.DataSource(2)})
stage21.Tasks.Add(New Task() With {.Name = "Making specification", .Executor = "Seto Kober", .StartDate = New DateTime(2011, 10, 5), .EndDate = New DateTime(2011, 10, 10), .State = States.DataSource(1)})
Dim stage22 As New ProjectStage() With {.Name = "Planning", .Executor = "Manley Difrancesco", .Tasks = New ObservableCollection(Of Task)()}
stage22.Tasks.Add(New Task() With {.Name = "Documentation", .Executor = "Martez Gollin", .StartDate = New DateTime(2011, 10, 15), .EndDate = New DateTime(2011, 10, 16), .State = States.DataSource(0)})
Dim stage23 As New ProjectStage() With {.Name = "Design", .Executor ="Clint Mary", .Tasks = New ObservableCollection(Of Task)()}
stage23.Tasks.Add(New Task() With {.Name = "Design of a web pages", .Executor = "Gasper Hartsell", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(0)})
stage23.Tasks.Add(New Task() With {.Name = "Pages layout", .Executor = "Shirish Huminski", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(0)})
Dim stage24 As New ProjectStage() With {.Name = "Development", .Executor = "Edwin Thone", .Tasks = New ObservableCollection(Of Task)()}
stage24.Tasks.Add(New Task() With {.Name = "Design", .Executor = "Zarko Knill", .StartDate = New DateTime(2011, 10, 27), .EndDate = New DateTime(2011, 10, 28), .State = States.DataSource(0)})
stage24.Tasks.Add(New Task() With {.Name = "Coding", .Executor = "Harley Kirckof", .StartDate = New DateTime(2011, 10, 29), .EndDate = New DateTime(2011, 10, 30), .State = States.DataSource(0)})
Dim stage25 As New ProjectStage() With {.Name = "Testing and Delivery", .Executor ="Boucher Hislop", .Tasks = New ObservableCollection(Of Task)()}
stage25.Tasks.Add(New Task() With {.Name = "Testing", .Executor = "Sarah Ragas", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(0)})
stage25.Tasks.Add(New Task() With {.Name = "Content", .Executor = "Rashid Terinoni", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(0)})
betaronProject.Stages.Add(stage21)
betaronProject.Stages.Add(stage22)
betaronProject.Stages.Add(stage23)
betaronProject.Stages.Add(stage24)
betaronProject.Stages.Add(stage25)
End Sub
Private Sub InitStantoneProjectData(ByVal stantoneProject As ProjectObject)
stantoneProject.Executor = "Ruben Ackerman"
Dim stage11 As New ProjectStage() With {.Name = "Information Gathering", .Executor = "Huyen Trinklein", .Tasks = New ObservableCollection(Of Task)()}
stage11.Tasks.Add(New Task() With {.Name = "Market research", .Executor = "Tanner Crittendon", .StartDate = New DateTime(2011, 10, 1), .EndDate = New DateTime(2011, 10, 5), .State = States.DataSource(2)})
stage11.Tasks.Add(New Task() With {.Name = "Making specification", .Executor = "Carmine Then", .StartDate = New DateTime(2011, 10, 5), .EndDate = New DateTime(2011, 10, 10), .State = States.DataSource(2)})
Dim stage12 As New ProjectStage() With {.Name = "Planning", .Executor = "Alfredo Sookoo", .Tasks = New ObservableCollection(Of Task)()}
stage12.Tasks.Add(New Task() With {.Name = "Documentation", .Executor = "Gorf Wobbe", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(2)})
Dim stage13 As New ProjectStage() With {.Name = "Design", .Executor = "Saphire Plump", .Tasks = New ObservableCollection(Of Task)()}
stage13.Tasks.Add(New Task() With {.Name = "Design of a web pages", .Executor = "Dominic Minden", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(1)})
stage13.Tasks.Add(New Task() With {.Name = "Pages layout", .Executor = "Pinkerton Trezise", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(1)})
Dim stage14 As New ProjectStage() With {.Name = "Development", .Executor = "Lauren Partain", .Tasks = New ObservableCollection(Of Task)()}
stage14.Tasks.Add(New Task() With {.Name = "Design", .Executor = "Delilah Beamer", .StartDate = New DateTime(2011, 10, 23), .EndDate = New DateTime(2011, 10, 24), .State = States.DataSource(1)})
stage14.Tasks.Add(New Task() With {.Name = "Coding", .Executor = "Dunaway Dupriest", .StartDate = New DateTime(2011, 10, 25), .EndDate = New DateTime(2011, 10, 26), .State = States.DataSource(0)})
Dim stage15 As New ProjectStage() With {.Name = "Testing and Delivery", .Executor = "Christos Arrant", .Tasks = New ObservableCollection(Of Task)()}
stage15.Tasks.Add(New Task() With {.Name = "Testing", .Executor = "Grice Ohora", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(0)})
stage15.Tasks.Add(New Task() With {.Name = "Content", .Executor = "Christos Arrant", .StartDate = New DateTime(2011, 10, 13), .EndDate = New DateTime(2011, 10, 14), .State = States.DataSource(0)})
stantoneProject.Stages.Add(stage11)
stantoneProject.Stages.Add(stage12)
stantoneProject.Stages.Add(stage13)
stantoneProject.Stages.Add(stage14)
stantoneProject.Stages.Add(stage15)
End Sub
End Class
End Namespace
Imports DevExpress.Xpf.Grid
Imports System.Collections
Namespace HierarchicalDataBinding
Public Class CustomChildrenSelector
Implements IChildNodesSelector
Public Function SelectChildren(ByVal item As Object) As IEnumerable Implements DevExpress.Xpf.Grid.IChildNodesSelector.SelectChildren
If TypeOf item Is Task Then
Return Nothing
ElseIf TypeOf item Is ProjectStage Then
Return (TryCast(item, ProjectStage)).Tasks
ElseIf TypeOf item Is ProjectObject Then
Return (TryCast(item, ProjectObject)).Stages
End If
Return Nothing
End Function
End Class
End Namespace