c# - WPF ListViewItem 项目复选框。如何获取所有选中的项目?

标签 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>

产生这个窗口的:

Window rendered by code

我如何知道选中了多少个复选框,并获取每个选中的 CheckBox 的值 Tag

最佳答案

我知道它已经过时了,但对于后代来说,如果人们对它不满意,这就是解决方案

<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>

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

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);
    }
}

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

现在您所要做的就是遍历该列表,该列表将仅包含实际选定的项目。这仅适用于单选,除了 lstMyObject 始终只包含 1 条记录。

关于c# - WPF ListViewItem 项目复选框。如何获取所有选中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606002/

相关文章:

c# - Rest API 设计(twitter)

c# - Azure 应用服务连接到本地 REST API

wpf - 无法将 Accordion SelectedIndex 绑定(bind)到 MVVM 整数属性

wpf - MVVM (with WPF) - 将多个 View 绑定(bind)到同一个 ViewModel

c# - Microsoft Graph - 在 SDK C# 中过滤

c# - Interop.Word Documents.Open 为空

.net - 为什么在绑定(bind)到它时没有设置我的依赖属性?

Datagrid 中的 C# WPF Expander 在滚动时应该被卡住(修复)

c# - TaskbarItemInfo.ProgressValue 未更新

wpf - ContextMenu 命令绑定(bind)到父级和自身