SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Infragistics NetAdvantageチュートリアル(AD)

Silverlightでのツリー表示(その1): 標準TreeViewコントロールとNetAdvantage XamDataTreeコントロール

  • このエントリーをはてなブックマークに追加

階層構造を持つデータの表示

 XamDataTreeコントロールでは階層構造データを取り扱うためにGlobalNodeLayoutsプロパティが定義されています。

 このプロパティにはNodeLayoutオブジェクトを複数に定義することができます。

 NodeLayoutオブジェクトはあらかじめ各種データに対する表示方法を以下のように定義しておくことができます。

NodeLayoutプロパティ 設定する値
Key NodeLayoutオブジェクトの特定に利用される一意の識別子を設定
TargetTypeName 表示を行うノードの型(クラス)
DisplayMemberPath 表示対象となる項目のプロパティパス

 そして、ItemsSourceプロパティに対して実際のデータがセットされた際、XamDataTreeコントロールはそのデータの階層構造を解析し、発見した各ノードの型に対応するNodeLayoutオブジェクトをGlobalNodeLayoutsプロパティ内に発見すると、それを利用して階層構造の各Nodeを表示します。

 あらためてこれらを整理すると以下のような形になります。

 それでは実際にLIST5で定義したエンティティクラスを使って階層構造を持つデータの表示を行ってみましょう。

 まず、エンティティクラスを利用して、最初に以下のような階層構造データをLoadedイベントでコーディングします。

LIST9:階層構造を持つデータの定義(C#)
private ObservableCollection<Person> persons;

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    persons = new ObservableCollection<Person>
                    {
                        new Person {    PersonName = "しるば太郎", 
                                        Children = 
                                        { 
                                            new Person { PersonName = "しるば子太郎"}
                                        }    
                        },
                        new Person {    PersonName = "しるば次郎",
                                        Children = 
                                        {    
                                            new Person {PersonName = "しるば子次郎"},
                                            new Person {PersonName = "しるば子三郎",
                                            Children = { new Person {PersonName = "しるば孫太郎"}}
                                            },
                                        }
                        },
                                
                        new Person {    PersonName = "しるば三郎" },
                        new Person {    PersonName = "しるば四郎" },
                        new Person {    PersonName = "しるば五郎" }
                    };
            
    xamDataTree1.ItemsSource = persons;
}

 上記のコードのほとんどはPersonクラスを使って階層構造を持つデータの作成であり、XamDataTreeコントロールにはItemsSourceプロパティにデータを設定したのみです。

 次にXAMLです。

 GlobalNodeLayoutsプロパティにPerson型に対応するNodeLayoutを定義します。そして、階層の最上階層を表示するためのDisplayMemberPathも併せて設定します。

<ig:XamDataTree Name="xamDataTree1" DisplayMemberPath="PersonName" >
    <ig:XamDataTree.GlobalNodeLayouts>
        <ig:NodeLayout 
            Key="ChildrenLayout" 
            TargetTypeName="Person" 
            DisplayMemberPath="PersonName"/>
    </ig:XamDataTree.GlobalNodeLayouts>
</ig:XamDataTree>

 実行結果は以下のようになります。

 もし、階層構造のメンバーに複数のデータ型が存在する場合、GlobalNodeLayoutsにその型に対応するNodeLayoutを追加するのみで複雑な階層構造も簡単にマッピングできます。

おわりに

 今回は階層構造を表示するためのコントロールTreeViewコントロールとXamDataTreeコントロールを紹介しました。

 今回の記事の中で、TreeViewコントロールを使った階層構造のデータを表示する方法に触れていませんでしたが、TreeViewコントロールは残念ながらXamDataTreeのようにプロパティ設定だけでデータに対してのマッピングを行う機能はありません。

 TreeViewコントロールで特定エンティティクラスとして定義された階層構造を持つオブジェクトの表示を行うには各Templateのカスタマイズが必要となります。

 次回は、これらのTemplateをはじめとするTreeViewおよびXamDataTreeのカスタマイズの方法について説明したいと思います。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Infragistics NetAdvantageチュートリアル連載記事一覧

もっと読む

この記事の著者

森 博之(AZPower株式会社)(モリ ヒロユキ)

 Microsoft Azure、.NETテクノロジーを使用したWebサービスのプロダクトアーキテクト。他にも技術記事の執筆やトレーニング、セミナースピーカーを行っている。 Microsoft MVPをDeveloper Technologies、Visual Studio and Development Technologies、Windows Development、Client App Dev、.NET、Silverlight、Visual C#などのコン...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5772 2011/04/08 12:15

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング