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;
}
}
}