2011-04-09 13 views
9

私はこのコードを持っている:私が選択され、各チェックボックスの値のタグが選択されますどのように多くのチェックボックスを知るにはどうすればよいWPFのListViewItem項目のチェックボックス

<ListView Height="238" 
       HorizontalAlignment="Left" 
       Name="listView1" 
       VerticalAlignment="Top" 
       Width="503" 
       ItemsSource="{Binding}" 
       IsSynchronizedWithCurrentItem="True"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox Tag="{Binding ID}"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn DisplayMemberBinding="{Binding ID}" Header="ID" /> 
        <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" /> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 

enter image description here

を?

+0

正確に達成したいことをもっと精巧にできますか? –

+0

チェックボックスを使って削除行を選択しましたが、チェックボックスの値タグを取得できません。 –

+1

ListViewにバインドしたオブジェクトのコレクションには、CheckboxのTagプロパティでバインドしたプロパティIDがあります。代わりに、そのオブジェクトにブール値のプロパティを持ち、それをCheckboxのIsCheckedプロパティにバインドします。次に、あなたのコレクションをあなたのビューモデルに反復して、どのアイテムがユーザによって選択されたかを見ることができます。注意が必要な追加事項:1.オブジェクトにINotifyPropertyChangedを実装させます。 2.チェックボックスには双方向バインディングを使用します。サンプルコードが必要な場合はお知らせください。 – publicgk

答えて

5

CheckBoxIsCheckedプロパティをViewModelのプロパティにバインドするのと同じくらい簡単です(存在しない場合は、新しいプロパティを追加する必要があります)。次に、ボタンをクリックすると、コレクション内のすべてのアイテムを繰り返し処理し、チェックされているアイテムを削除します(ViewModelのプロパティの値に基づいて)。

8

私はそれは古いですが、人々は

private List<MyObject> lstMyObject = new List<MyObject>(); 

private void listView1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    foreach (MyObject item in e.RemovedItems) 
    { 
     lstMyObject.Remove(item); 
    } 

    foreach (MyObject item in e.AddedItems) 
    { 
     lstMyObject.Add(item); 
    } 
} 

listView1_SelectionChangedにCSファイルのコードで、この時にこれをここに解決策が

<ListView Height="238" 
       HorizontalAlignment="Left" 
       Name="listView1" 
       VerticalAlignment="Top" 
       Width="503" 
       ItemsSource="{Binding}" 
       IsSynchronizedWithCurrentItem="True" 
       SelectionChanged="listView1_SelectionChanged"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox Tag="{Binding ID}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn DisplayMemberBinding="{Binding ID}" Header="ID" /> 
        <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" /> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 

を無精ひげ場合は後世のためにlstMyObjectがあなたと同じタイプでなければなりません知っていますオブジェクトはリストにバインドされます。コードは元のリストの項目への参照をそのリストに追加したり削除したりするだけです。

これで、実際に選択されたアイテムだけを含むリストをループするだけです。これはlstMyObjectが常に1つのレコードしか含まないことを除いて、単一の選択に対してのみ機能します。

関連する問題