WPF ListviewItem项目复选框.如何获得所有选定的项目?

Nhu*_*yen 13 c# wpf binding wpf-controls

我有这个代码:

<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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我如何知道选中了多少个复选框,并获取所选复选框的值标签?

Fra*_*nck 20

我知道它已经老了,但是对于后人来说,如果人们在这里发茬就是解决方案

<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>
Run Code Online (Sandbox Code Playgroud)

然后在listView1_SelectionChanged中的cs文件代码中

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

lstMyObject应该与绑定到列表的对象的类型相同.并且代码将简单地添加和删除对该列表的原始列表的项目的引用.

现在你要做的就是遍历那个只包含实际选中项目的列表.这仅适用于单个选择,除了lstMyObject将始终只包含1个记录.


jer*_*lan 6

它应该像在ViewModel上绑定IsChecked属性的属性一样简单CheckBox(如果新属性尚不存在,则可能需要添加它).然后,一旦单击该按钮,您将只迭代集合中的所有项目,并删除已检查的项目(基于ViewModel上的属性值).