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

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

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

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

WPF

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

Q&A

解決済

1回答

3416閲覧

WPF 複数のListBoxから選択されている情報をTextBlockにバインドしたい

k_yanase

総合スコア10

C#

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

WPF

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

0グッド

0クリップ

投稿2016/07/08 02:41

###前提・実現したいこと
いつもお世話になっております。
WPFのバインドについての質問です

ListBox1、ListBox2内にあるいずれかの選択項目情報をTextBlockにバインドさせたいです。

例)
ListBoxA ListBoxB
田中 佐藤
伊藤 鈴木

上記項目がリストに入っており、ListBの鈴木が選択状態にある時
TextBlockには 「名前:鈴木 年齢:30歳・・・」 と反映させたいと考えています

なおリストボックスには単一セルのみ選択可能な制御
リストボックス選択時には他リストボックスの選択解除処理を組み込む予定です

###試したこと
TextBlockに以下のようにMultiBindingの設定を行いました

<TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0}{1}"> <Binding Path= "SelectedItem.Comment" ElementName="ListBox1"/> <Binding Path= "SelectedItem.Comment" ElementName="ListBox2" /> </MultiBinding> </TextBlock.Text> </TextBlock>

###発生している問題
試した内容ですとListBox1,ListBox2ともに選択状態な場合のみ
「名前:田中 年齢:45歳・・・ 名前:鈴木 年齢:30歳・・・」と2項目の情報が表示されます
どちらか片方のListBoxが選択されている状態での反映方法はないでしょうか?

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

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

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

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

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

wakuwaku

2016/07/08 03:58

両方選択されている場合どのような処理になりますか。また、たとえばListBox1で田中を選択した後、ListBox2で佐藤を選択した場合も両方選択されていることになりますが、その場合どのようになりますか。
k_yanase

2016/07/08 04:17

コメントありがとうございます。 両方選択状態となるのを避けるために、 各ListBoxのSelectionChangedに非選択としたいListBoxのSelectedIndexを-1に変更する処理を入れております。 例えの回答としましてはListBox1の田中選択は無効となり、ListBox2の佐藤のみ選択されている状態となります
guest

回答1

0

ベストアンサー

片方しか選択されないということですので。

ListBox1のSelectedIndexが-1になった場合に、
ListBox2のSelectedItemをバインドしてあげればよいでしょう。
StyleとTriggerが使えます。

下記のような感じです。

<ListBox x:Name="ListBox1" ItemsSource="{Binding MyData1}"/> <ListBox x:Name="ListBox2" ItemsSource="{Binding MyData2}"/> <TextBlock> <TextBlock.Style> <Style TargetType="TextBlock"> <Setter Property="Text" Value="{Binding ElementName=ListBox1, Path=SelectedItem.Comment}" /> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=ListBox1,Path=SelectedIndex}" Value="-1"> <Setter Property="Text" Value="{Binding ElementName=ListBox2, Path=SelectedItem.Comment}"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock>

投稿2016/07/08 04:46

wakuwaku

総合スコア386

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

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

k_yanase

2016/07/08 04:59

無事、解決いたしました。 早々の回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問