基于属性值的绑定对象集合

本文关键字:绑定 对象 集合 于属性 属性 | 更新日期: 2023-09-27 18:17:10

我正在尝试将对象集合绑定到Telerik TreeView控件。我的对象结构应该是这样的:

Item 1.1
   - Item 1.1.1
       - Item 1.2.1
       - Item 1.2.2
   - Item 1.1.2
...
Item n.1
   - Item n.1.1
      - Item n.2.1
        - Item n.3.1

所有这些对象都有一个共同的bool属性,即isBindable。我想把这个集合绑定到我的TreeView控件,但是这个控件应该只绑定对象,如果它的属性是isBindable = true。

我不想在对控件执行ItemSource操作之前,循环遍历整个集合并基于isBindable逐个删除。

有更好的主意我怎么才能做到这一点,也许用LINQ?

谢谢,Bhaskar

基于属性值的绑定对象集合

您可以尝试使用递归实现这一点。你需要一个单独的foreach环路。请看下面的方法。把你的集合传递给这个方法,看看它是否被过滤了。

private List<Item> Filter(List<Item> itemList)
        {
            List<Item> filteredItems = (from c in itemList
                                        where c.IsBindable == true
                                        select c).ToList();
            foreach (Item item in filteredItems)
            {
                if (item.Item != null)
                    item.Item = Filter(item.Item);
            }
            return filteredItems;
        }
class Item
    {
        public List<Item> Item { get; set; }
        public bool IsBindable { get; set; }
        public Item()
        {
            IsBindable = false;
        }
    }

您可以使用Where:

筛选项目
collection.Where(x => x.isBindable);

你可以把树做成线性序列,然后像这样检查你的条件

collection.SelectMany(item=> item.SubItems).Where(subitem)