如何在WPF DataGrid中获取已勾选行的文本值
获取WPF DataGrid中已勾选复选框的文本值
嗨,这事儿好办!首先得确认你的DataGrid绑定的数据源是什么类型的对象——我假设你有一个自定义的数据模型类,比如叫MyItem,里面包含MyString和MyBool两个属性(如果还没定义,先补上这个类):
// 数据模型类,实现INotifyPropertyChanged以便双向绑定(可选但推荐) public class MyItem : INotifyPropertyChanged { private string _myString; private bool _myBool; public string MyString { get => _myString; set { _myString = value; OnPropertyChanged(); } } public bool MyBool { get => _myBool; set { _myBool = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
接下来,假设你已经把这个类的实例集合绑定到了DataGrid的ItemsSource(比如在窗口构造函数里填充数据):
public MainWindow() { InitializeComponent(); // 模拟填充数据源 var items = new ObservableCollection<MyItem> { new MyItem { MyString = "选项1", MyBool = false }, new MyItem { MyString = "选项2", MyBool = true }, new MyItem { MyString = "选项3", MyBool = true } }; dataGrid1.ItemsSource = items; }
现在要获取所有MyBool为true的项的MyString值,只需要用LINQ筛选数据源就行,填充你给的代码框架后是这样:
// 筛选已勾选项并提取文本值 var SelectedList = dataGrid1.ItemsSource .Cast<MyItem>() .Where(item => item.MyBool) .Select(item => item.MyString) .ToList();
关键点说明:
- 必须把
ItemsSource转换成你的数据模型类型(这里是MyItem),用Cast<MyItem>或者OfType<MyItem>都可以; Where(item => item.MyBool)用来筛选复选框被勾选的项;Select(item => item.MyString)提取你需要的文本值;- 最后用
ToList()转换成List<string>(或者你需要的其他集合类型)。
如果你的数据源不是强类型的(比如用的是匿名对象或者DataTable),可以稍微调整写法,但强类型模型是WPF绑定的最佳实践,建议优先用上面的方式。
内容的提问来源于stack exchange,提问作者Ramakrishnan Ram
相关产品推荐
相关产品推荐

