AUTHOR: Georgi Georgiev
DATE POSTED: April 03, 2014
public
class
Team : INotifyPropertyChanged
{
private
string
teamName;
TeamName
get
return
this
.teamName; }
set
.teamName = value;
.OnPropertyChanged(
"TeamName"
);
}
BindingList<TeamMember> TeamMembers {
;
; }
BindingList<Task> TeamTasks {
Team(
teamName)
.TeamName = teamName;
.TeamMembers =
new
BindingList<TeamMember>();
.TeamTasks =
BindingList<Task>();
.TeamMembers.ListChanged += TeamMembers_ListChanged;
.TeamTasks.ListChanged += TeamTasks_ListChanged;
void
TeamTasks_ListChanged(
object
sender, ListChangedEventArgs e)
"TeamTasks"
TeamMembers_ListChanged(
event
PropertyChangedEventHandler PropertyChanged;
protected
virtual
OnPropertyChanged(
propName)
if
(
.PropertyChanged !=
null
)
.PropertyChanged(
,
PropertyChangedEventArgs(propName));
TeamMember : INotifyPropertyChanged
memberName;
MemberName
.memberName;
.memberName = value;
"MemberName"
BindingList<Task> MemberTasks {
TeamMember(
memberName)
.MemberName = memberName;
.MemberTasks =
.MemberTasks.ListChanged += MemberTasks_ListChanged;
MemberTasks_ListChanged(
"MemberTasks"
Task : INotifyPropertyChanged
taskName;
TaskName
.taskName; }
.taskName = value;
"TaskName"
Task(
taskName)
.TaskName = taskName;
Public
Class
Team
Implements
INotifyPropertyChanged
Private
m_teamName
As
String
Property
TeamName()
Get
Return
Me
.m_teamName
End
Set
(value
.m_teamName = value
TeamMembers()
BindingList(Of TeamMember)
m_TeamMembers
BindingList(Of TeamMember))
m_TeamMembers = value
TeamTasks()
BindingList(Of Task)
m_TeamTasks
BindingList(Of Task))
m_TeamTasks = value
Sub
New
(teamName
.TeamName = teamName
BindingList(Of TeamMember)()
BindingList(Of Task)()
AddHandler
.TeamMembers.ListChanged,
AddressOf
TeamMembers_ListChanged
.TeamTasks.ListChanged,
TeamTasks_ListChanged
TeamTasks_ListChanged(sender
Object
, e
ListChangedEventArgs)
TeamMembers_ListChanged(sender
Event
PropertyChanged
PropertyChangedEventHandler
INotifyPropertyChanged.PropertyChanged
Protected
Overridable
OnPropertyChanged(propName
RaiseEvent
PropertyChanged(
PropertyChangedEventArgs(propName))
TeamMember
m_memberName
MemberName()
.m_memberName
.m_memberName = value
MemberTasks()
m_MemberTasks
m_MemberTasks = value
(memberName
.MemberName = memberName
.MemberTasks.ListChanged,
MemberTasks_ListChanged
MemberTasks_ListChanged(sender
Task
m_taskName
TaskName()
.m_taskName
.m_taskName = value
(taskName
.TaskName = taskName
.TreeView =
RadTreeView();
.TreeView.Parent =
.TreeView.Dock = DockStyle.Fill;
.TreeView.AllowRemove =
true
.TreeView.AllowAdd =
.TreeView.LazyMode =
.TreeView.AllowDefaultContextMenu =
RadTreeView()
.TreeView.Dock = DockStyle.Fill
True
RadTreeNode CreateNode(
text,
tag)
RadTreeNode newNode =
RadTreeNode(text);
newNode.Tag = tag;
newNode;
Function
CreateNode(text
, tag
RadTreeNode
Dim
newNode
RadTreeNode(text)
newNode.Tag = tag
InitializeHierarchy()
//the Teams collection is a property of the Form
.Teams =
BindingList<Team>();
Team winFormsTeam =
"WinForms"
.Teams.Add(winFormsTeam);
TeamMember john =
"John"
winFormsTeam.TeamMembers.Add(john);
Task johnsTask =
"Refactor RadTreeView"
john.MemberTasks.Add(johnsTask);
TeamMember alice =
"Alice"
winFormsTeam.TeamMembers.Add(alice);
Task aliceTask =
"Help John"
alice.MemberTasks.Add(aliceTask);
Task winFormsUnassignedTask =
"Create an article regarding TreeView load on demand and CRUD operations"
winFormsTeam.TeamTasks.Add(winFormsUnassignedTask);
Team wpfTeam =
"WPF"
.Teams.Add(wpfTeam);
TeamMember annie =
"Annie"
wpfTeam.TeamMembers.Add(annie);
Task annieTask =
"Research for control XXXXX"
annie.MemberTasks.Add(annieTask);
Task unnasignedWpfTask =
"Help Annie"
wpfTeam.TeamTasks.Add(unnasignedWpfTask);
Task secondUnnasignedWpfTask =
"Evaluate the research of Annie"
wpfTeam.TeamTasks.Add(secondUnnasignedWpfTask);
TeamMember memberWithoutTasks =
"Jack"
wpfTeam.TeamMembers.Add(memberWithoutTasks);
foreach
(Team team
in
.Teams)
.TreeView.Nodes.Add(
.CreateNode(team.TeamName, team));
'the Teams collection is a property of the Form
BindingList(Of Team)()
winFormsTeam
.Teams.Add(winFormsTeam)
john
winFormsTeam.TeamMembers.Add(john)
johnsTask
john.MemberTasks.Add(johnsTask)
alice
winFormsTeam.TeamMembers.Add(alice)
aliceTask
alice.MemberTasks.Add(aliceTask)
winFormsUnassignedTask
winFormsTeam.TeamTasks.Add(winFormsUnassignedTask)
wpfTeam
.Teams.Add(wpfTeam)
annie
wpfTeam.TeamMembers.Add(annie)
annieTask
annie.MemberTasks.Add(annieTask)
unnasignedWpfTask
wpfTeam.TeamTasks.Add(unnasignedWpfTask)
secondUnnasignedWpfTask
wpfTeam.TeamTasks.Add(secondUnnasignedWpfTask)
memberWithoutTasks
wpfTeam.TeamMembers.Add(memberWithoutTasks)
For
Each
team
In
.Teams
.CreateNode(team.TeamName, team))
Next
TreeView_NodesNeeded(
sender, NodesNeededEventArgs e)
(e.Parent ==
|| e.Parent.Tag ==
|| e.Parent.Tag
is
Task)
Team team = e.Parent.Tag
as
Team;
(team !=
(TeamMember member
team.TeamMembers)
e.Nodes.Add(
.CreateNode(member.MemberName, member));
(Task task
team.TeamTasks)
.CreateNode(task.TaskName, task));
TeamMember teamMember = e.Parent.Tag
TeamMember;
(teamMember !=
teamMember.MemberTasks)
TreeView_NodesNeeded(sender
NodesNeededEventArgs)
If
e.Parent
Is
Nothing
OrElse
e.Parent.Tag
TypeOf
Then
Team = TryCast(e.Parent.Tag, Team)
team IsNot
member
team.TeamMembers
.CreateNode(member.MemberName, member))
task
team.TeamTasks
.CreateNode(task.TaskName, task))
teamMember
TeamMember = TryCast(e.Parent.Tag, TeamMember)
teamMember IsNot
teamMember.MemberTasks
TreeView_NodeFormatting(
sender, TreeNodeFormattingEventArgs e)
Team team = e.Node.Tag
TeamMember teamMember = e.Node.Tag
((e.Node.Tag ==
|| e.Node.Tag
Task) ||
&& team.TeamMembers.Count == 0 && team.TeamTasks.Count == 0) ||
&& teamMember.MemberTasks.Count == 0))
e.NodeElement.ExpanderElement.Visibility = Telerik.WinControls.ElementVisibility.Hidden;
else
e.NodeElement.ExpanderElement.ResetValue(VisualElement.VisibilityProperty, ValueResetFlags.Local);
TreeView_NodeFormatting(sender
TreeNodeFormattingEventArgs)
Team = TryCast(e.Node.Tag, Team)
TeamMember = TryCast(e.Node.Tag, TeamMember)
(e.Node.Tag
e.Node.Tag
(team IsNot
AndAlso
team.TeamMembers.Count = 0
team.TeamTasks.Count = 0)
(teamMember IsNot
teamMember.MemberTasks.Count = 0)
e.NodeElement.ExpanderElement.Visibility = Telerik.WinControls.ElementVisibility.Hidden
Else
e.NodeElement.ExpanderElement.ResetValue(VisualElement.VisibilityProperty, ValueResetFlags.Local)
TreeView_NodeAdded(
sender, RadTreeViewEventArgs e)
(e.Node.Parent ==
Team team = e.Node.Parent.Tag
TeamMember member = e.Node.Tag
(member !=
team.TeamMembers.Add(member);
Task task = e.Node.Tag
Task;
(task !=
team.TeamTasks.Add(task);
TeamMember teamMember = e.Node.Parent.Tag
teamMember.MemberTasks.Add(task);
TreeView_NodeRemoving(
sender, RadTreeViewCancelEventArgs e)
team.TeamMembers.Remove(member);
team.TeamTasks.Remove(task);
teamMember.MemberTasks.Remove(task);
TreeView_NodeAdded(sender
RadTreeViewEventArgs)
e.Node.Parent
Team = TryCast(e.Node.Parent.Tag, Team)
member IsNot
team.TeamMembers.Add(member)
Task = TryCast(e.Node.Tag, Task)
task IsNot
team.TeamTasks.Add(task)
TeamMember = TryCast(e.Node.Parent.Tag, TeamMember)
teamMember.MemberTasks.Add(task)
TreeView_NodeRemoving(sender
RadTreeViewCancelEventArgs)
team.TeamMembers.Remove(member)
team.TeamTasks.Remove(task)
teamMember.MemberTasks.Remove(task)
Resources Buy Try