問題タブ [hierarchicaldatatemplate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 型が混在する WPF ツリービュー データバインド階層データ
WPF Treeview Binding には少し複雑な状況があります。過去 2 日間 Google で試してみましたが、これは私が思いついた閉鎖ですが、問題は解決しません。
状況は次のとおりです。
次のようなオブジェクトがあります。
各カテゴリには、オブジェクトのリストと子カテゴリを含めることができます。私にはこれを行う理由があり、それは私にとって、そして私が書いているアプリにとって完全に理にかなっています。
実際のオブジェクトの構築は次のようになります。
今、私はこの関係をツリービューにデータバインドしようとしています。TreeView が上記のオブジェクト構造とほぼ同じに見えるようにしたいと思います。
これまでのところ、XAML Treeview は次のようになっています。
これは、カテゴリのメイン リストとそのサブ製品のそれぞれに最適です。ただし、各カテゴリの下にサブカテゴリが表示されるわけではありません。
各項目 (カテゴリまたは製品) が選択されるように、テンプレートを使用してこれを直接行う方法はありますか? 私はMVVMパターンを使用しており、コードビハインドを使用することに頼りたくありませんが、必要に応じて使用します。
silverlight - Silverlightで相互参照する2つのHierarchicalDataTemplatesを作成するにはどうすればよいですか?
とすれば:
- TargetTypeでDataTemplatesを割り当てることはできません
- StaticResource参照は、以前にのみ参照できます
TreeViewで次の状況をどのようにテンプレート化しますか?
その構造は、次のようなツリーに適しています。
TargetType
のプロパティがあるため、これはWPFのテンプレートでは簡単ですHierarchicalDataTemplate
。Silverlightでは、次のようなことを行う必要があります。
XAMLドキュメントで定義されているため、ResourceTemplate
参照できないため、明らかに機能しません。PropertyTemplate
では、この鶏が先か卵が先かという問題をどのように解決しますか?
silverlight - ObservableCollections を含む ObservableCollections が正しくレンダリングされない
私は Silverlight の経験が比較的新しく、モデルとして POCO を返す DomainService を使用して MVVM アプリを作成しようとしています。プロパティの 1 つとして ObservableCollection を持つ型の ObservableCollection にバインドするように設定された ItemsSource を持つ TreeView を持つ UserControl があり、そのコレクションは ObservableCollection のプロパティを持つ型です。そのため、HierarchicalDataTemplate を TreeView の ItemTemplate として TextBlocks とともに使用して、各項目の Name プロパティをレンダリングしています。以下にいくつかのコードを含めます。
したがって、クラスは次のようになります。
基本的に、私のコレクションは、A、B、および C のリストを取得するメソッドを使用して DataRepository から取り込まれます。各インスタンスは、foreach ループを介して LINQ で適切に追加されます。リストを返します。このメソッドは、default.aspx.cs から呼び出して、すべてのデータが正しく追加されていることを確認するために実行したため、正しく機能します。
しかし、私の問題は、画面にレンダリングされると、どのコレクションも正しくないことです。たとえば、"A" の "B" の子コレクションの最初のアイテムは、4000 を超えるカウントを持つ必要がありますが、何も表示されません。それなのに、最初の「A」のコレクション「Bs」にあるはずの「B」の最初のアイテムが、「A」の 2 番目のアイテムとして表示されます。
(あるべき姿の例)
a1
- b1.1
- c1.1.1
- c1.1.2
- c1.1.3
- b1.2
- c1.2.1
- c1.2.2
- b1.1
a2
- b2.4
- c2.4.1
- c2.4.2
- c2.4.3
- b2.4
a3
- b3.6
- c3.6.1
- c3.6.2
- c3.6.3
- b3.6
a4
- b4.8
- c4.8.1
- c4.8.2
- c4.8.3
- b4.8
(表示例)
- a1
- a2
- b2.2
- c2.2.2
- b2.2
- a3
- a4
- b4.4
- c4.4.4
- b4.4
いくつかの調査の後、私が目にする唯一のパターンは、階層が同じ ID に基づいているということです。
コードサンプルは次のとおりです。
(DataContext は UserControl リソースによって設定されます)
ビューモデル
この質問が長くなってしまったことをお詫びします。漠然としたものではなく、役立つアドバイスを得たいと思っていました。この問題は数日間私を悩ませてきましたが、先に進む準備ができています. 泥沼から抜け出すのを手伝ってください。前もって感謝します。また、MVVM の知識に役立つ良いリンクがあれば、それらも大歓迎です。
私の環境は: - Asp.Net 4 - Silverlight 4 - VisualStudio 2010
wpf - 子ノードを追加すると、WPFTreeViewノードが選択できなくなります
WPFTreeViewに大きな問題があります。これに似たツリーを設定しました。
TreeViewは、xamlの分離コードファイル内のObservableCollectionであるProjectsと呼ばれるDependencyPropertyにバインドされています。ツリーがバインドされているクラスの基本構造は、ツリーの構造に従います。したがって、Projectには、INotifyPropertyChangedインターフェイスとICollectionChangedインターフェイスの両方を実装するカスタムコレクションが含まれています。そのコレクションには、Stepsというプロパティからアクセスでき、Stepオブジェクトが含まれています。Stepクラスには、Loadsというプロパティからアクセスできる同じカスタムコレクションのインスタンスもあり、Loadオブジェクトが含まれています。
これで、プロジェクト内の任意のオブジェクトを操作すると、ネストされたコレクションのセットが変更されると、ノードが表示および非表示になり、正しく変更されるという点で、ツリーが正しく動作します。ほとんどの場合、すべてが正常に機能します。
上記のXamlには表示していませんが、上記の各ノードには独自のコンテキストメニューが追加されています。そのコンテキストメニューのオプションの1つは、オブジェクトを追加することです。したがって、たとえば、ステップノードを右クリックすると、その下にロードノードを追加するオプションがあります。StepオブジェクトのLoadsプロパティにLoadクラスを追加すると、ノードがツリーに正常に表示されます。
たとえば、コードは次のようになります。
さて、これが私が今最も長い間理解しようとしてきた問題です。その新しいノードがツリーに表示されると、その親ノードは選択できなくなります。したがって、与えられた例では、新しく追加されたロードノードを所有するステップノードを選択することはできません。次にDoubleClickやRightClickなどを実行してイベントを発生させることはできますが、マウスの左ボタンでシングルクリックするだけでは、ステップノードが選択されたりフォーカスが移動したりすることはありません。私は考えられるすべてのことを試みました、そして私は私の人生のためになぜそうしないのか理解することができません。
これで、ツリー内の他のノードをクリックすることができ、それらは問題なく選択できます。そして、そうすると、以前は選択できなかったノードが以前の機能に戻り、再び選択できるようになります。
つまり、新しいノードを追加すると、そのノードが表示され、TreeViewの他の部分を選択するまでその親を選択できなくなり、すべてが再び正常になります。
wpf - wpfTreeViewのノードを接続するための点線
wpfのノードを接続するために点線を描画する方法を探していますTreeView
。問題は、sを入力する代わりに使用していることのHierarchicalDataTemplate
ようです。TreeView
TreeViewItem
私はこの投稿を見つけました: http ://social.msdn.microsoft.com/forums/en-US/wpf/thread/30cb182c-9419-40bd-946e-87971515fb95/
魔女はそれを投入する場合にそれをうまく解決しTreeViewItem
ますが、私の質問は、どのようにそれを解決するのHierarchicalDataTemplate
ですか?
私のテンプレートは次のようになります。
問題を解決する方法についての解決策や良いヒントはありますか?
wpf - HierarchicalDataTemplate を使用して WPF TreeView に値が設定されない
以下のコードでは、ツリービューにデータが取り込まれません。誰が私が間違っているかを見ることができますか?
ありがとう
c# - 単一の Silverlight TreeView ノードに複数の種類の子を含めるにはどうすればよいですか?
短いバージョン:
TreeView
さまざまな種類の項目の階層 ( ) を表示する必要がありますが、Silverlight でこれをきれいに行う方法がわかりません。HierarchicalDataTemplate
WPF では、型に基づいてテンプレート ( ) を定義するのは簡単ですが、この機能は Silverlight では使用できません。Silverlight では、特定のノードのすべての子に同じテンプレートを適用する必要があるようです。そのため、考えられるすべてのタイプのノードを処理する 1 つのモンスター テンプレートが、すべてのノードに適用されることになります。
長いバージョン (例):
より具体的な (ただし不自然な) 例を示すために、さまざまなフォルダー内のアーカイブのツリービューを考えてみましょう。各アーカイブには、写真、曲、およびその他のアーカイブを含めることができます。各フォルダーには、複数のサブフォルダーとアーカイブが含まれる場合があります。
ツリーの各タイプ (フォルダ、アーカイブ、写真、曲) は、異なる方法で表示されます。明らかな解決策は、HierarchicalDataTemplate
表示するアイテムの種類ごとに を作成することのようです。残念ながら、ノード ( ) のすべての子に対して単一のテンプレート タイプを指定する必要があるように思われるため、これを行う良い方法が見つかりませんItemsSource={Binding ...}, ItemsTemplate={StaticResource TemplateForAllChildren}
。
この要件により、テンプレートは雪だるま式になります... アーカイブには、写真、曲、およびアーカイブを子として含めることができます。1 つのテンプレートをすべての子に適用する必要があるため、その 1 つのテンプレートで写真、曲、およびアーカイブを処理できる必要があります。同様に、フォルダのテンプレートはフォルダとアーカイブを処理できる必要があり、アーカイブ テンプレートには写真と歌が含まれているため、すべてが写真、曲、アーカイブ、およびフォルダを処理できる 1 つの巨大なテンプレートになります。より多くのタイプが追加されると、それらも 1 つの巨大なテンプレートにまとめられます。
さまざまなタイプがツリーに追加されるため、1 つの巨大なテンプレート (および関連するノード ビューモデル) を蓄積することなく、これをきれいに行う方法はありますか?
ありがとう!
明確化:
これまでの回答に感謝しますが、元の問題に戻るだけかもしれません。私は答えを誤解しているかもしれません。
以下を示す TreeView を検討してください。
曲の場合: アーティスト/タイトルを含むスクロール テキスト ボックスと再生ボタン
写真の場合: サムネイル画像と星評価コントロール
アーカイブの場合: 圧縮を示すプログレス バーを含むアーカイブ イメージ
フォルダの場合: フォルダ名を示すプレーン ラベル
私が知る限り、これを実現する唯一の方法は、スクロール テキスト ボックス、再生ボタン、サムネイル ビューア、スター コントロール、画像コントロール、進行状況バー、およびラベルを含む 1 つの巨大な HierarchicalDataTemplate を用意することです。次に、ノードに実際に適用される 1 つまたは 2 つのコントロールを除くすべてを選択的に非表示にします。
WPF では、テンプレートをノード タイプに関連付けることができたので、各ノードは適切なテンプレートを使用できました。Silverlightでこれを行う方法があるかどうか疑問に思っています。
再度、感謝します!
wpf - Silverlight と WPF - HierarchialDataTemplate を使用したツリービュー
以下は、WPF では十分に簡単ですが、Silverlight ではどのように行うのでしょうか?
ここでのコツは、グループとエントリの両方を同じレベルに表示することです。さらに、エントリがネストされている深さがわかりません。最初のレベルまたは n 番目のレベルにある可能性があります。H.DataTemplate (または任意の DataTemplate) に DataType="{x:Type local:Group}" プロパティがないため、これは Silverlight では困難です。Hierarchial ItemsSource が失われるため、独自のカスタム DataTempalteSelector の構築も機能しませんでした。(これは私がすぐに調査する新しいアイデアを与えてくれました)
例:
あなたのクラス:
あなたのxaml:
c# - 階層データグリッドの子
MainXaml.Cs
こんにちは私はその親ソースに関連する子データをロードすることに問題はありません。問題は、別の行を展開しようとすると、その行の最初のデータが読み込まれることです。たとえば、row1を展開すると、正しい子テーブルが表示されますが、row2に移動して展開すると、その子レコードはrow1用になります。答えを探して、それを処理するためにparent_IsExpandedChangedイベントを配置しようとしましたが、それでも正しいデータが表示されません。アプリケーションを再度リロードして、行2または行3を展開しようとすると、その子は正しいですが、別の行を展開すると、行2または行3の子が表示されます。
wpf - ネストされた子リストを持つ WPF TreeView、Entity Framework、および HierarchicalDataTemplate
HierarchicalDataTemplate(s) を使用して複雑なデータ構造を WPF TreeView にバインドしようとしています。データのコレクションは、ViewModel に MyObject の IList として格納されています。MyObject にはいくつかのプロパティがあり、そのうちのいくつかは独自のリストです。
私が達成しようとしている出力は、次のようなものです。
ただし、いくつかの場所が機能しているのを見た複合コレクションを取得できないようです-