UWP技术问询:如何将ListView多选条目数据存入数组?
在UWP中收集ListView的多个选中项数据
当然有办法啦!在UWP里获取ListView的多个选中项其实很简单,我给你两种常用的实现方式,根据你的开发模式选就行:
方法一:后台代码直接获取(适合代码后置开发)
首先你得确保你的ListView开启了多选功能——在XAML里把SelectionMode属性设为Multiple或者Extended(默认是Single只能单选):
<ListView x:Name="MyListView" SelectionMode="Multiple"> <!-- 你的ItemTemplate和ItemsSource配置 --> </ListView>
之后,当你需要获取选中项时(比如用户点击了一个“确认”按钮),直接用ListView的SelectedItems属性就行。这个属性返回的是IList<object>,你只需要把它转换成你数据项的具体类型,再转成数组或List:
// 假设你的数据项类型是自定义的MyItem类 private void ConfirmButton_Click(object sender, RoutedEventArgs e) { // 转成数组 MyItem[] selectedArray = MyListView.SelectedItems.Cast<MyItem>().ToArray(); // 或者转成List List<MyItem> selectedList = MyListView.SelectedItems.Cast<MyItem>().ToList(); // 接下来就可以用这个数组/List做你需要的操作啦 }
方法二:MVVM模式下绑定选中项(适合数据驱动开发)
如果用MVVM模式不想直接操作UI控件,可以把选中项绑定到ViewModel的集合里。UWP的SelectedItems支持双向绑定,先准备好ViewModel:
ViewModel代码示例
using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.CompilerServices; public class MainViewModel : INotifyPropertyChanged { // 用于存储选中项的集合 private ObservableCollection<MyItem> _selectedItems; public ObservableCollection<MyItem> SelectedItems { get => _selectedItems; set { _selectedItems = value; OnPropertyChanged(); } } // ListView的数据源 public ObservableCollection<MyItem> ItemList { get; set; } public MainViewModel() { ItemList = new ObservableCollection<MyItem>(); SelectedItems = new ObservableCollection<MyItem>(); // 这里可以初始化ItemList的测试数据 } // INotifyPropertyChanged接口实现 public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
XAML绑定配置
<ListView ItemsSource="{Binding ItemList}" SelectionMode="Multiple" SelectedItems="{Binding SelectedItems, Mode=TwoWay}"> <!-- 你的ItemTemplate --> </ListView>
这样一来,用户选中或取消选中项时,ViewModel里的SelectedItems集合会自动更新。你需要用的时候直接转成数组就行:
var selectedArray = SelectedItems.ToArray();
注意事项
- 一定要设置
SelectionMode为Multiple或Extended,否则SelectedItems只会包含最多一个项。 - 如果你用的是自定义数据模型,转换类型时要确保
Cast<T>()的类型和你的数据项一致,避免类型转换异常。 - MVVM模式下,记得要给页面设置ViewModel作为DataContext哦。
内容的提问来源于stack exchange,提问作者Cruwiel
相关产品推荐
相关产品推荐

