For this TreeView definition, I want the button background to be black with white font when the TreeItem.Selected property is true. Then, I want the node to go back to a clear background with black font when when that property is false. How do I do this?
@using System.Collections.ObjectModel
@using Palmer.Doc.Models
@page "/tree"
<
TelerikButton
Primary
=
"true"
OnClick
=
"CreateItem"
>Create item</
TelerikButton
>
<
TelerikButton
Primary
=
"true"
OnClick
=
"DeleteItem"
>Delete item</
TelerikButton
>
<
TelerikTreeView
Data
=
"@TreeData"
>
<
TreeViewBindings
>
<
TreeViewBinding
IdField
=
"Id"
TextField
=
"Text"
>
<
ItemTemplate
>
@{
<
TelerikButton
OnClick="@(() => OnClickHandler(context as TreeItem))">@((context as TreeItem).Text)</
TelerikButton
>
}
</
ItemTemplate
>
</
TreeViewBinding
>
</
TreeViewBindings
>
</
TelerikTreeView
>
@code{
public class TreeItem
{
public string Id { get; set; } = $"{Guid.NewGuid()}";
public string Text { get; set; }
public string ContextId { get; set; }
public ObservableCollection<
TreeItem
> Items { get; set; } = new ObservableCollection<
TreeItem
>();
public bool Expanded { get; set; }
public bool HasChildren { get; set; }
public bool Selected { get; set; }
}
#region Properties
public TreeItem SelectedItem { get; set; }
public ObservableCollection<
TreeItem
> TreeData { get; set; }
#endregion
#region Event Handlers
protected override void OnInitialized()
{
LoadHierarchical();
}
private void OnClickHandler(TreeItem context)
{
SelectedItem = context;
}
#endregion
#region Methods
private void CreateItem()
{
if (SelectedItem != null)
{
AddNode(SelectedItem, "New Item");
}
}
private void DeleteItem()
{
if (SelectedItem != null)
{
TreeItem parent = GetById(SelectedItem.ContextId);
if (parent != null)
{
parent.Items.Remove(SelectedItem);
SelectedItem = parent;
SelectedItem.HasChildren = SelectedItem.Items.Count > 0;
SelectedItem.Expanded = SelectedItem.HasChildren;
}
}
}
private void LoadHierarchical()
{
ObservableCollection<
TreeItem
> roots =
new ObservableCollection<
TreeItem
>()
{
new TreeItem { Text = "Item 1", Expanded = true },
new TreeItem { Text = "Item 2" }
};
AddNode(roots[0], "Item 1 first child");
AddNode(roots[0], "Item 1 second child");
AddNode(roots[1], "Item 2 first child");
AddNode(roots[1], "Item 2 second child");
TreeData = roots;
}
private void AddNode(TreeItem parent, string childText)
{
AddNode(parent, new TreeItem()
{
Text = childText
});
}
private void AddNode(TreeItem context, TreeItem child)
{
child.ContextId = context.Id;
context.Items.Add(child);
context.HasChildren = true;
context.Expanded = true;
SelectedItem = child;
}
public TreeItem GetById(string id)
{
TreeItem result = null;
// perform a recursive search starting with the root nodes
foreach (var treeItem in TreeData)
{
result = getById(id, treeItem);
if (result != null) break;
}
return result;
}
/// <
summary
>
/// Perform a recursive search using the given node
/// </
summary
>
/// <
param
name
=
"id"
></
param
>
/// <
param
name
=
"parent"
></
param
>
/// <
returns
></
returns
>
private TreeItem getById(string id, TreeItem node)
{
TreeItem result = null;
if (node.Id == id)
{
result = node;
}
else
{
foreach (TreeItem child in node.Items)
{
result = getById(id, child);
if (result != null) break;
}
}
return result;
}
#endregion
}