To reproduce: use the following code:
public Form1()
{
InitializeComponent();
this.radTreeView1.MultiSelect = true;
for (int i = 0; i < 3; i++)
{
RadTreeNode node = new RadTreeNode();
node.Text = "Node." + i;
for (int j = 0; j < 3; j++)
{
node.Nodes.Add(new RadTreeNode("Node." + i + "." + j));
}
this.radTreeView1.Nodes.Add(node);
}
this.radTreeView1.SelectedNodeChanged += radTreeView1_SelectedNodeChanged;
}
private void radTreeView1_SelectedNodeChanged(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e)
{
Console.WriteLine(e.Node.Text + ">> Selected: " + e.Node.Selected);
}
1.Select a node
2.Press Ctrl and click over the selected node again in order to unselect it. The SelectedNodeChanged event will not fire.
Workaround:
public class MyRadTreeNode : RadTreeNode
{
public MyRadTreeNode(string text) : base(text)
{
}
private static readonly MethodInfo OnSelectedNodeChangedMethodInfo =
typeof(RadTreeViewElement).GetMethod("OnSelectedNodeChanged",
BindingFlags.NonPublic | BindingFlags.Instance, null,
new Type[] { typeof(RadTreeNode), typeof(RadTreeViewAction) }, null);
protected override void OnNotifyPropertyChanged(PropertyChangedEventArgs args)
{
base.OnNotifyPropertyChanged(args);
if (args.PropertyName == "Selected" && TreeViewElement != null)
{
OnSelectedNodeChangedMethodInfo.Invoke(TreeViewElement, new object[] { this, RadTreeViewAction.ByMouse });
}
}
}