To reproduce: use the following code public class Item { public int Id { get; set; } public string Title { get; set; } public string Tag { get; set; } public Item(int id, string title, string tag) { this.Id = id; this.Title = title; this.Tag = tag; } } public Form1() { InitializeComponent(); List<Item> items = new List<Item>(); items.Add(new Item(1,"a1","x1")); items.Add(new Item(2,"a2","x2")); items.Add(new Item(3,"a3","x3")); items.Add(new Item(4,"b1","y1")); items.Add(new Item(5,"b2","y2")); items.Add(new Item(6,"b3","y3")); this.radTreeView1.DataSource = items; this.radTreeView1.DisplayMember = "Title"; this.radTreeView1.ValueMember = "Id"; radTreeView1.FilterDescriptors.Add(new FilterDescriptor("Tag", FilterOperator.Contains, "y")); } Workaround: use custom filtering: public Form1() { InitializeComponent(); List<Item> items = new List<Item>(); items.Add(new Item(1,"a1","x1")); items.Add(new Item(2,"a2","x2")); items.Add(new Item(3,"a3","x3")); items.Add(new Item(4,"b1","y1")); items.Add(new Item(5,"b2","y2")); items.Add(new Item(6,"b3","y3")); this.radTreeView1.DataSource = items; this.radTreeView1.DisplayMember = "Title"; this.radTreeView1.ValueMember = "Id"; radTreeView1.FilterDescriptors.Add(new FilterDescriptor("Tag", FilterOperator.Contains, "y")); radTreeView1.TreeViewElement.FilterPredicate = FilterNode; } public class Item { public int Id { get; set; } public string Title { get; set; } public string Tag { get; set; } public Item(int id, string title, string tag) { this.Id = id; this.Title = title; this.Tag = tag; } } private bool FilterNode(RadTreeNode node) { Item item = node.DataBoundItem as Item; if (item != null && radTreeView1.FilterDescriptors.Count > 0) { FilterDescriptor fd = radTreeView1.FilterDescriptors[0]; var propertyValue = item.GetType().GetProperty(fd.PropertyName, BindingFlags.Public | BindingFlags.Instance).GetValue(item, null); if (propertyValue.ToString().Contains(fd.Value.ToString())) { return true; } return false; } return false; }