基于属性值绑定对象集合

时间:2011-12-09 06:19:47

标签: c# linq telerik

我正在尝试将对象集合绑定到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?

谢谢, 巴斯卡尔

3 个答案:

答案 0 :(得分:0)

您可以使用Where过滤商品:

collection.Where(x => x.isBindable);

答案 1 :(得分:0)

您可以尝试使用递归来实现此目的。你需要一个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;
        }

    }

答案 2 :(得分:0)

您可以将树形成一个线性序列并检查您的状况

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