Hi,
Spent some time today with the RadTreeView and can't figure out why a node is removed fine from the DS when using
radTreeView1.DisplayMember = "Name";
radTreeView1.ValueMember = "Id";
But not when using:
radTreeView1.DisplayMember = "Name\\ChildName";
radTreeView1.ChildMember = "list\\ChildObjects";
Regards,
Thomas
See code below:
namespace RadTreeViewTest{ public partial class RadForm1 : Telerik.WinControls.UI.RadForm { BindingList<MyObject> list = new BindingList<MyObject>(); int counter = 0; public RadForm1() { InitializeComponent(); list.ListChanged += List_ListChanged; radTreeView1.DataSource = list; radTreeView1.DisplayMember = "Name\\ChildName"; radTreeView1.ChildMember = "list\\ChildObjects"; //radTreeView1.DisplayMember = "Name"; //radTreeView1.ValueMember = "Id"; } private void List_ListChanged(object sender, ListChangedEventArgs e) { radLabel1.Text = ""+list.Count; } private void radButton1_Click(object sender, EventArgs e) { list.Add(new MyObject(counter++, "Test " + counter, 5)); } } public class MyObject : INotifyPropertyChanged { private int id; public int Id { get { return id; } set { SetField(ref id, value, "Id"); } } private string name; public string Name { get { return name; } set { SetField(ref name, value, "Name"); } } private int counter; public int Counter { get { return counter; } set { SetField(ref counter, value, "Counter"); } } public BindingList<ChildObject> ChildObjects { get; set; } public MyObject() { } public MyObject(int i, string n, int c) { ChildObjects = new BindingList<ChildObject>(); this.Id = i; this.Name = n;this.Counter = c; ChildObjects.Add(new ChildObject(i, "ghejwgk 1")); ChildObjects.Add(new ChildObject(i, "ghejwgk 2")); } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } protected bool SetField<T>(ref T field, T value, string propertyName) { if (EqualityComparer<T>.Default.Equals(field, value)) return false; field = value; OnPropertyChanged(propertyName); return true; } } public class ChildObject { public int ParentId { get; set; } public string ChildName { get; set; } public ChildObject(int i, string n) { this.ParentId = i; this.ChildName = n; } }}