locked
SelectedItemsをコード側からセットしたい(読取専用ですが・・・) RRS feed

  • 質問

  • 損と申します。
    Silverlight4+VS2010+Blend4で開発しております。

    DataGridを継承したカスタムコントロールを作成しており、SelectedItemsプロパティの扱いで詰まっています。

    SelectedItemsは読取専用のため、コード側から値を入れることができないのですが、何とかして「全行選択」機能を実装したいと考えております。
    SelectionMode="Extended"のDataGridで、コード側から任意の複数行を選択状態にする方法は無いでしょうか。

     

    2011年6月8日 4:09

回答

  • SelectedItems プロパティ自体は読み取り専用ですが、読み取ったものは IList なので SelectedItems に対しては項目を追加できるはずです。
    例えばこんな感じ。

    foreach (var item in dataGrid1.ItemsSource)
    {
     dataGrid1.SelectedItems.Add(item);
    }
    
     
    • 回答としてマーク 2011年6月8日 5:34
    2011年6月8日 5:20

すべての返信

  • SelectedItems プロパティ自体は読み取り専用ですが、読み取ったものは IList なので SelectedItems に対しては項目を追加できるはずです。
    例えばこんな感じ。

    foreach (var item in dataGrid1.ItemsSource)
    {
     dataGrid1.SelectedItems.Add(item);
    }
    
     
    • 回答としてマーク 2011年6月8日 5:34
    2011年6月8日 5:20
  • こんにちは。

    以下、あくまで思いつきですが、

    IListインターフェースを通してはアクセスできますので、
    Addメソッドを使ってみるとか。

    例)
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          dataGrid1.SelectedItems.Clear();
    
          //ViewModelを取得する
          var vm = (MyViewModel)this.DataContext;
     
          foreach (var item in vm.BindingItems)
          {
            //DataGrid.ItemsSourceにバインドしているアイテムすべてを追加する。
            dataGrid1.SelectedItems.Add(item);
          }
        }
    

    ※ 動作検証はしていません。あくまで一番コード量が少なくて済む例を思いつきで考えたと理解してください。
    ※ 本格的にやるには、DataGridを継承して全選択メソッドを作る等が良いのかもしれません。
    2011年6月8日 5:35
  • あ、かぶっちゃいましたね、すみません。
    2011年6月8日 5:35
  • ご返信、誠に有難うございます。

    読取専用に釣られて勘違いをしておりました。

    全選択機能が実装できました。有難うございました。

    2011年6月8日 5:36