質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

5121閲覧

WPF TreeViewの子要素にリストを表示したい

ElecDove

総合スコア254

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/06/29 02:50

編集2017/06/29 04:09

お世話になっております。

WPF初心者でデータバインドの(書き方の)理解に苦しんでいるものです。

現在、TreeViewにデータを表示したいと思っており、ネット上のサンプルを見ながら
・表示したいオブジェクト(下の例ではfuga)
・自分と同じ型のリスト(下の例ではhoge)

を持つオブジェクトを階層構造で表示することは理解いたしました。

C#

1class hoge{ 2 public fuga Name; 3 public List<hoge> Child; 4} 5class fuga{ 6 Point A; 7 Point B; 8 public override ToString(){ 9 //省略 10 } 11}

ここで、**fugaを配列(リスト)にして、Treeにはそのリストの中身とhoge**を表示してほしいのですが、XAMLの書き方がわからず困っております.

また、デフォルトではToStringの戻値が表示されるようですが、指定したメソッドの戻り値を表示させるにはどうすればよいのでしょうか

よろしくお願いいたします。

C#

1class hoge{ 2 public List<fuga> Name; 3 public List<hoge> Child; 4} 5class fuga{ 6 Point A; 7 Point B; 8 public override ToString(){ 9 //省略 10 } 11}

よろしくお願いいたします。

追記---

イメージとしてこんな感じになります.

├hoge[0]┬fuga[0] │ ├fuga[1] │ ├fuga[2] │ ├hoge[0]┬fuga[0] │ │ ├fuga[1] │ │ ├hoge[0]・・・ │ │ ├hoge[1]・・・ │ ├hoge[1]・・・ ├hoge[1]・・・ ・ ・ ・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ebiryo

2017/06/29 03:26

stringの配列とhogeクラスの関係が良くわからないのですが、Treeに表示したいのはstringの配列なのでしょうか?hogeなのでしょうか?
ebiryo

2017/06/29 03:29

fugaのListである Name から Treeに表示する文字列をどうやって設定したらよいか?ということですかね?
ElecDove

2017/06/29 03:32 編集

言葉足らずでした.表示したいのはList<fuga>の要素です.おっしゃるとおりです
ebiryo

2017/06/29 03:45

すみません、理解できていないですが、Treeに表示したいのは hoge で、Treeのノードとして表示される各々のhogeの名称を List<fuga>から生成したい、ということですかね?
ElecDove

2017/06/29 04:00 編集

TreeViewにhogeを表示し,その子要素としてList<fuga>とList<hoge>の両方を表示したいです.
ElecDove

2017/06/29 04:00

あ,リストうまくいかないですね,質問本文を編集します
ebiryo

2017/06/29 04:14

ん、 一番上の hoge[0] と fuga[0] などhogeとfugaが同じ階層あるということですかね?Treeなので入れ子構造ならわかりますが、同じ階層というのはあまり見たことのないですが。
ElecDove

2017/06/29 04:19

やはり見かけない例なのですね…おっしゃるとおり同じ階層です。イメージは、Windowsのエクスプローラでしょうか。ファイルと、フォルダです。今のところfugaは入れ子になる予定はありませんが、hogeはガッツリ入れ子です。
ElecDove

2017/06/29 04:20

fugaを一つしか内包しないhogeを作れば実現できますねこれ…ても、できれば最初に上げたやり方でやりたいです…
ebiryo

2017/06/29 04:26

ん、fugaがファイルに相当し、hoge がフォルダに相当する、ということでしょうか?そうであれば、一番上のfuga[0]は一番上のhoge[0]の「下」にぶら下がるはずですよね(私が勘違いしているのでしょうか。。)
ElecDove

2017/06/29 04:32

はい,そのとおりだと思います.
guest

回答1

0

ベストアンサー

これでご要望の動きになるかわかりませんが、

  • hogeクラスに、配下のhoge,fuga両方を列挙するプロパティを実装

C#

1public IEnumerable<object> Items 2{ 3 get 4 { 5 foreach (var v in Name) 6 yield return v; 7 foreach (var v in Child) 8 yield return v; 9 } 10}
  • 実装したItemsプロパティをItemsSourceに指定

hoge,fugaそれぞれに対応したHierarchicalDataTemplate も用意

XAML

1<TreeView ItemsSource="{Binding XXX}"> 2 <TreeView.Resources> 3 <!-- hoge用テンプレート--> 4 <HierarchicalDataTemplate DataType="{x:Type local:hoge}" ItemsSource="{Binding Items}"> 5 <TextBlock Text="{Binding}" /> 6 </HierarchicalDataTemplate> 7 <!-- fuga用テンプレート--> 8 <HierarchicalDataTemplate DataType="{x:Type local:fuga}" > 9 <TextBlock Text="{Binding}" /> 10 </HierarchicalDataTemplate> 11 </TreeView.Resources>

でどうでしょうか?
※当然ですが、hoge配下のName、ChildはフィールドではなくPropertyで
※ChildはChildrenのほうが良いと思います

投稿2017/06/29 05:14

ebiryo

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ElecDove

2017/06/29 05:16

回答いただきありがとうございます. 今ちょっと実行できないので,後でやってみたいと思います. ※Childは単数でした(^^;Childrenにしておきます
ElecDove

2017/06/29 16:29

思っていたとおりの動作をしました!!!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問