• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

元)零細社長のブログ一覧

2007年11月28日 イイね!

【C#】ListViewに自作コントローラーをぶら下げる【.NET3.0】

.NET3.0のコントローラーはUIElementという抽象化クラスで扱えることになっているのでなんでもサブクラス化できる。
ドロップダウンリストにImageがそのままAddできちゃったときはおしっこ漏らしそうなほどびっくりしたものだ。

ちょっとこれ.NET2.0でやったら3日はかかるんですけど(゚Д゚)

ならば
TreeViewにもImageやボタン、はては自作コントローラーもAddできるんでない?



まずは配列を作らなくてはいかん。
ObservableCollectionで自作コントローラーの配列を作ってTreeコントローラーにバインドしてみた。
すると確かに自作コントローラーが並んだ。
しかし階層化されない。
そりゃそうだ。
しかしどうやって・・・。うーむ。

まずは
例によって文献が超少ない中頑張って調べた。どうもHierarchicalDataTemplateというテクニックを使うといいらしい。
ここにサンプルがある(日本語版だとなぜかサンプルプロジェクトのリンクが切れてる)。

サンプルでは
親クラス
コドモクラスの配列(List)
名前


コドモクラス
孫クラスの配列(List)
名前


孫クラス
名前


と用意されていて、大元クラスが親クラスをメンバーとして保持。
コンストラクタで親・子供・孫と、適宜追加している。
なるほど。

で、XAMLでDataTemplateではなく、HierarchicalDataTemplateとしてリソースを作っている。
親・子供・孫それぞれ定義している。
コードを見ると、ItemsResourceのところに、保持する配列のクラスが定義されていることが分かる。
なるほど。

さらにいろいろいじって分かったこと
HierarchicalDataTemplateを定義する方法はXAMLを直に書くしかない。
階層クラスは子供・孫と用意する必要はない。自分をメンバー化すれば再帰的に階層化できる(まぁこれは普通)。


というわけで
親クラス
親クラス
名前
自作コントローラー


という構成でクラスを作って、大元クラスで親クラスを複数用意し、Addしまくって階層構造を作り、TreeViewにバインド。

しかし
名前しか出ん(´・ω・`)

バインド時にDataTemplateであれこれいじってもダメ。

無理なのか・・・?
いやまて、そのDataTemplateのXAMLコードを調べてみよう。
良く見ると並びがオブジェクトウィンドウのWindowの並びに似ている。
そうか、ということは・・・(-_☆)キラーン

結果
<HierarchicalDataTemplate>
<UserControler>
(ここにさっきまでTextBlockというコントローラーがあった)
</HierarchicalDataTemplate>

これだけでよい。
これだけで自作コントローラーを階層表示させることができる。
経験者なら分かるが、これは本来なら非常に面倒で果てしない作業だ。

しかし.NET3.0ならたったの3行(いや、その上にソース引用元とか書かなきゃいけないんだけど)。
しかもロジックコードではなく、XAMLのコードだけだ。

信じられん!
なんて簡単なんだ!!!
(ToT)
Posted at 2007/11/28 22:19:05 | コメント(0) | トラックバック(0) | プログラム | 日記

プロフィール

みんカラ新規会員登録

ユーザー内検索

<< 2007/11 >>

    123
45 6 78 910
11121314151617
181920 21222324
252627 282930 

リンク・クリップ

有楽町丸井 
カテゴリ:脱キモオタ
2007/09/15 15:55:54
 
Elastic 
カテゴリ:脱キモオタ
2007/02/13 00:55:22
 
スタイルコネクション 
カテゴリ:脱キモオタ
2007/02/13 00:33:58
 

愛車一覧

日産 180SX 日産 180SX
おっさんなのに180sx
ヘルプ利用規約サイトマップ
© LY Corporation