You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:06:46