none
複数のデータをバインドする RRS feed

  • 質問

  • 現在ListViewに名前が並んで表示されており、名前を選択するとしたのプロパティ欄にその人の詳細情報がバインドされます。

    ここで質問なのですが、この選択を複数選択にも対応させたいのですが、よい方法が思いつきません。

    VisualStudioのデザイナでコントロールを選択するとプロパティが表示されると思うのですが、コントロールを複数選択すると共通のものだけ値が表示されると思います。これと同じことをしたいのです。

    似たようなことをしているサンプルを探したのですが見つからなかったためこちらで質問させていただきます。

    よろしくお願いします。

    2011年6月15日 10:01

回答

    1. ListViewItem にバインディングされるデータクラス A に IsSelected かなんかを用意し、ListView.ItemContainerStyle で ListViewItem の IsSelected プロパティとバインドする。
    2. A のコレクションを持つクラス B を用意して、これを ListView や詳細情報のバインディング相手とする。B はさらに内部に「現在選択中の A のコレクション」、および詳細情報にバインディングされる SelectedItemsName とかそんな感じの各プロパティを持つ。
    3. B は A の IsSelected の変更を監視し、「現在選択中の A のコレクション」を増減する。同時に SelectedItemsName などの変更通知イベントを発生させる。
    4. SelectedItemsName は get のなかで「現在選択中の A のコレクション」を確認し適切な値を返す。

    とこんな感じでいかがでしょう。面倒ですね。

    • 回答としてマーク tcan 2011年6月19日 1:26
    2011年6月15日 10:29
  • Hongliangさんの方法で無事解決しました。ありがとうございました。

    • 回答としてマーク tcan 2011年6月19日 1:26
    2011年6月19日 1:26

すべての返信

    1. ListViewItem にバインディングされるデータクラス A に IsSelected かなんかを用意し、ListView.ItemContainerStyle で ListViewItem の IsSelected プロパティとバインドする。
    2. A のコレクションを持つクラス B を用意して、これを ListView や詳細情報のバインディング相手とする。B はさらに内部に「現在選択中の A のコレクション」、および詳細情報にバインディングされる SelectedItemsName とかそんな感じの各プロパティを持つ。
    3. B は A の IsSelected の変更を監視し、「現在選択中の A のコレクション」を増減する。同時に SelectedItemsName などの変更通知イベントを発生させる。
    4. SelectedItemsName は get のなかで「現在選択中の A のコレクション」を確認し適切な値を返す。

    とこんな感じでいかがでしょう。面倒ですね。

    • 回答としてマーク tcan 2011年6月19日 1:26
    2011年6月15日 10:29
  • VisualStudioのデザイナでコントロールを選択するとプロパティが表示されると思うのですが、コントロールを複数選択すると共通のものだけ値が表示されると思います。これと同じことをしたいのです。

    似たようなことをしているサンプルを探したのですが見つからなかったためこちらで質問させていただきます。

    実現されたいことがはっきりわからなかったので逆に質問させて下さい。
    コントロールはいろいろな種類がありますから、その共通のプロパティのみを表示するというのはわかるのですが、今回はListViewに表示されている「人」という全て同じオブジェクトですから、全てのプロパティが共通になり、詳細情報には全てのプロパティが表示されることになると思うのです。この表示されたプロパティそれぞれについては、選択した人々が全て同じ値を持っているプロパティについてはその値を表示し、そうでなければそのプロパティは何も入力されていない状態で表示するということを実現されたいのでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年6月15日 15:21
    モデレータ
  • お返事が遅れたことをお詫び申し上げます。

    >>この表示されたプロパティそれぞれについては、選択した人々が全て同じ値を持っているプロパティについてはその値を表示し、そうでなければそのプロパティは何も入力されていない状態で表示するということを実現されたいのでしょうか?

    はい。まったくこの通りです。

    コントロールにてプロパティの値を直接変更すると同一の値が複数のオブジェクトに対して適用されることになります。

    これだけならまだ問題なさそうなのですが、コントロールを使わずにプロパティの値に変化がおきた場合のことも考えると悩ましいのです。

     

    Hongliangさんに提示頂いた方法については現在検討中です。ありがとうございます。

    2011年6月17日 3:00
  • Hongliangさんの方法で無事解決しました。ありがとうございました。

    • 回答としてマーク tcan 2011年6月19日 1:26
    2011年6月19日 1:26