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

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

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

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

Visual Studio

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

WPF

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

Q&A

解決済

2回答

8386閲覧

treeView.ItemsSource=表示したいリスト → 更新されない

ElecDove

総合スコア254

C#

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

Visual Studio

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

WPF

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

0グッド

0クリップ

投稿2017/06/29 13:18

編集2017/06/29 15:03

お世話になります.

WPFでTreeViewを使っています.

treeView.ItemsSource=ほげほげリスト

という風にすると確かに,TreeViewには「ほげほげリスト」の中身がツリー表示されるのですが,
「ほげほげリスト」を更新し,改めて

treeView.ItemsSource=ほげほげリスト

ともう一度指定してもTreeViewが更新されません.

更新を通知する方法もあると思うのですが,なぜこの方法ではできないのでしょうか

回答よろしくお願いいたします.

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

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

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

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

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

guest

回答2

0

すでに解決済みですが、少し補足したいと思います。

  • まずなぜ再代入してもUIが更新されないのか、とういう点については質問者さんの理解であっています。Tree側としては同じインスタンスなので、更新は行いません。

  • ちなみに「更新」といっても、

1.ツリーの構成を変えるような更新(ノードの削除、追加)
2.構成は同じでノードの中身が更新(名称が変わったetc)
があるかと思います。

1に関しては通常リストや配列ではなく、ObservableCollectionで要素を格納しておけば、削除・追加のイベントが通知されてUIが勝手に更新されます。

2に関してはBindingしているPropertyで変更の通知上げてあげればUI側は更新されます。これは通常ViewModelのPropertyとして実装するものです

  • ちなみにこれらの話はTreeViewに限ったことではないです。ListBoxでもDataGridでも同じことです。

投稿2017/06/30 01:37

編集2017/06/30 01:38
ebiryo

総合スコア797

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

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

0

ベストアンサー

一度、nullを入れるとListBoxは、できたような。一度、Clearしないとだめという感じかな。

詳しくはhttp://referencesource.microsoft.com/
ここで、ソースを読むといいよ。(なげやり)

投稿2017/06/29 16:24

kiichi54321

総合スコア1984

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

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

ElecDove

2017/06/29 16:32 編集

回答ありがとうございます リンク先はまだ見てないのですが,とりあえずnullをいったん入れてからやるとうまくいきました! なんだかあまり直感的ではなくてもやもやします 変更通知を使えってことでしょうか・・・. 憶測ですが,ここも内部的にはBindingのようなもので, nullをいれずに再度代入した場合,あくまで参照の代入なので(C言語で言うところの)ポインタは同じ場所を指したままなので「変更した」と認識してもらえないってことなんですかねー
kiichi54321

2017/06/29 16:57 編集

まぁ、さっき挙げたサイトで、実際の実装を読めるので、読むといいですよ。 そこで、OnItemsSourceChangedを検索してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問