WPF ListViewItem 项目复选框。如何获取所有选定的项目?
Posted
技术标签:
【中文标题】WPF ListViewItem 项目复选框。如何获取所有选定的项目?【英文标题】:WPF ListViewItem item CheckBox. How to get all selected items? 【发布时间】:2011-08-02 03:16:58 【问题描述】:我有这个代码:
<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>
产生这个窗口:
我如何知道选中了多少个复选框,并获取每个选中的CheckBox
的值Tag
?
【问题讨论】:
您能否详细说明您想要实现的目标?? 我使用复选框删除行被选中,但我无法获取选中复选框的值标签。 你绑定到 ListView 的对象集合有一个属性 ID,你已经绑定了 Checkbox 的 Tag 属性。相反,在该对象中有一个布尔属性并将其与 Checkbox 的 IsChecked 属性绑定。然后,您可以简单地在视图模型中迭代您的集合,并查看用户选择了哪些项目。您需要注意的其他事项: 1. 使您的对象实现 INotifyPropertyChanged。 2. Checkbox 使用双向绑定。如果您需要一些示例代码,请告诉我们。 【参考方案1】:它应该像将CheckBox
的IsChecked
属性绑定到ViewModel 上的属性一样简单(如果新属性不存在,您可能需要添加它)。然后,单击按钮后,您只需遍历集合中的所有项目,并删除已检查的项目(基于 ViewModel 上的属性值)。
【讨论】:
【参考方案2】:我知道它已经过时了,但是如果人们发现这个问题,这就是解决方案
<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 应该与绑定到列表的对象类型相同。并且代码将简单地添加和删除对该列表的原始列表项的引用。
现在您要做的就是遍历该列表,该列表将仅包含实际选择的项目。这仅适用于单选,除了 lstMyObject 将始终只包含 1 条记录。
【讨论】:
【参考方案3】:一个建议...
就像所有 Windows 控件中的 Tag 属性一样,我一直在我的所有数据模型中都有一个 Tag 属性,用于在运行时进行一般用途。我使用该属性来保持 ListView 中项目的选中状态。在其他情况下,我也使用它们来保存复杂的对象。
【讨论】:
以上是关于WPF ListViewItem 项目复选框。如何获取所有选定的项目?的主要内容,如果未能解决你的问题,请参考以下文章
WPF:防止在 Shift + 箭头上选择 ListViewItem