none
ListViewの複数選択のバインド RRS feed

  • 質問

  • 複数選択を許可したListViewの選択常態をTwoWayでバインドしたいです。

    普通にSelectedItemsをバインドするのはダメだと知り、

                <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                    </Style>
                </ListView.ItemContainerStyle>

    としてやりソース側にもIsSelectedプロパティを追加してバインドしました。

    ListViewの選択常態をころころ変えてみたところソース(モデル)側のIsSelectedは同期しました。

    しかしながら逆にソースで値を変更してもListViewの選択常態が変更されません。

     

    解決方法を教えていただけないでしょうか?

    2011年6月18日 15:04

回答

  • どのような構造でバインドされていますか? ListViewItemのDataContextにModelが設定されている状態であれば、ModelにINotifyPropertyChangedインターフェースを実装すれば解決します。
    以下が参考になると思います。(以下はSilverlightの記事ですが、WPFでも同じです)

    Silverlight + MVVM モデルで DataGrid をバインドの落とし穴(その2)
    http://www.moonmile.net/blog/archives/324

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク ai1022 2011年6月19日 1:18
    2011年6月18日 16:11
    モデレータ
  • ありがとうございます。実装できて満足です。

    できるということを知り、再度よく見直してみたところIsSelectedを実装したクラスのコレクションを所持したクラスのほうでINotifyPropertyChangedを実装していました。

    どれだけプロパティ変更を通知しても反映されないわけです。お恥ずかしい限りです。

    丁寧に解説いただき心より感謝申し上げます。

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

すべての返信

  • どのような構造でバインドされていますか? ListViewItemのDataContextにModelが設定されている状態であれば、ModelにINotifyPropertyChangedインターフェースを実装すれば解決します。
    以下が参考になると思います。(以下はSilverlightの記事ですが、WPFでも同じです)

    Silverlight + MVVM モデルで DataGrid をバインドの落とし穴(その2)
    http://www.moonmile.net/blog/archives/324

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク ai1022 2011年6月19日 1:18
    2011年6月18日 16:11
    モデレータ
  • ありがとうございます。実装できて満足です。

    できるということを知り、再度よく見直してみたところIsSelectedを実装したクラスのコレクションを所持したクラスのほうでINotifyPropertyChangedを実装していました。

    どれだけプロパティ変更を通知しても反映されないわけです。お恥ずかしい限りです。

    丁寧に解説いただき心より感謝申し上げます。

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