異なるテーブルのフィールドにバインドして、各ListBoxアイテムテキストブロックに表示する方法

StackOverflow https://stackoverflow.com/questions/1816533

  •  08-07-2019
  •  | 
  •  

質問

すべての人にあいさつをし、私の英語を申し訳なく思います! ListBoxがあり、ItemsSource = myClientsList.DefaultViewです。 ListBoxのItemsには、別のリソースファイルで定義されているテンプレート(ControlTemplate)があります。 すべての項目には小さなTextBlockが含まれ、それぞれのTextプロパティには、myObjectsListオブジェクトのフィールドへのバインディングがあります。

このアイテムテンプレートにさらにTexBlockを追加する必要があり、それぞれが別のmyクラスmyOrdersListのフィールドにバインドする必要があります。 -(したがって、データベースの異なるテーブルからのListBox情報の各行で表示したい-これは質問です。)

そのListBoxのItemsSourceにオブジェクトmyClientsListへのリンクがあり、myOrderListを同じListBoxのItemSourceに設定できないという問題。だから、ControlTemplate内でTextBlock.DataContextを指定する方法、またはこの問題を別の方法で解決する方法を見つける必要がありますか?

p.s。私は.NetとWPFの初心者で、おそらく説明に間違いがあります。ごめんなさい。

役に立ちましたか?

解決

DataGridタイプのディスプレイがあり、特定のクライアントの注文情報を表示するために列を追加したいようです。この場合、いくつかのことを行う必要があります。まず、両方のエンティティの情報を1つのオブジェクトに格納する複合オブジェクトを作成する必要があります(したがって、コントロールの各行には、表示に必要なすべてのデータが含まれます)。次に、ListBoxItemをテンプレート化する代わりに、実際のDataGridコントロールを使用して行を表示することをお勧めします。 GridViewがフレームワークに組み込まれたListViewはあまり良くないので、 WPFToolkitのDataGrid をお勧めします無料オプション。

他のヒント

質問を理解した場合、ここには2つの問題があります。クライアントと注文の両方を含む単一のコレクションを作成する方法と、同じリストボックス内でクライアントと注文を異なる方法で表示する方法です

最初については、CompositeCollectionを使用してこれを行うことができます。

2番目については、ControlTemplateの代わりに2つのDataTemplatesを定義します。各DataTemplateのキーとして、提示するオブジェクトのタイプを使用します。例:

<DataTemplate x:Key="{x:Type local:Client}">

または、ItemsControl.ItemTemplateSelectorを使用して、アイテムのタイプに応じて異なるDataTemplatesを明示的にポイントします。本当にControlTemplatesを使用する必要がある場合は、ItemsControl.ItemContainerStyleSelectorを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top