2011-12-09 20 views
0

オブジェクトコレクションを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に基づいて1つずつ削除する必要はありません。

どのように私はそれを達成することができますか、多分LINQで?

おかげで、 Bhaskar

+0

なぜYourCollection.Selectにツリービューを結合しない(項目=> item.IsBindable) – Maheep

答えて

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

    } 
+0

ありがとう、これは私が探しているものです(foreachを使用していても) – Bhaskar

0

あなたはWhereを使用してアイテムをフィルタリングすることができます

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

のようなあなたの状態を確認することができ、私は私が記事で述べたように、ツリーのようなオブジェクトコレクションでそれを適用してください。私は単純なオブジェクトコレクション、すなわちリストで行うことができますが、私のobj構造はツリーのようなものです。すなわち、メインコレクションの各オブジェクトはリストを持ち、各オブジェクト2はリスト、つまり木のような構造を持っています – Bhaskar

+0

@Bhaskar:申し訳ありませんが、Telerikのコントロールについてはわかりません。しかし、私はそれが 'treeView.ItemSource = collection.Where(x => x.isBindable);'のようなものでなければならないと思います。今コレクションをどのようにバインドしていますか? – Otiel

+0

コレクションを同じ方法でバインドするだけです(treeView.ItemSource = collection)。しかし、私の質問は、collection.Where(x => x.isBindable)はトップレベルのオブジェクトのみをフィルタリングし、その子オブジェクトのコレクションは何か、私はオブジェクトコレクションのnレベルの深さを持つことができます。 – Bhaskar

0

あなたは線状配列にツリーを作る取得し、この

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