Привязка коллекции объектов на основе значения свойства - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь привязать коллекцию объектов к элементу управления 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.

Я не хочу перебирать всю коллекцию и удалять по одному на основе isBindable, прежде чем использовать ItemSource для элемента управления.

Есть какая-нибудь лучшая идея, как мне этого добиться, может быть, с помощью LINQ?

Спасибо, Bhaskar

Ответы [ 3 ]

0 голосов
/ 09 декабря 2011

Вы можете попытаться достичь этого с помощью рекурсии.Вам понадобится один цикл 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;
        }

    }
0 голосов
/ 09 декабря 2011

Вы можете сделать дерево в линейной последовательности и проверить свое состояние следующим образом

collection.SelectMany(item=> item.SubItems).Where(subitem)
0 голосов
/ 09 декабря 2011

Вы можете отфильтровать свои вещи, используя Where:

collection.Where(x => x.isBindable);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...