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

WPF ListView点击复选框未选中行及获取勾选项问题咨询

WPF ListView CheckBox 选中问题解决方案

最快修复崩溃问题

你不需要依赖listView.SelectedItem获取当前行数据,触发事件的CheckBox的DataContext本身就对应当前行绑定的module对象,直接取值即可:

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    module v = (module)((CheckBox)sender).DataContext;
    _client.AddClientModule(v.path);
}

private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
    module v = (module)((CheckBox)sender).DataContext;
    _client.RemoveClientModule(v.name);
}

实现点击CheckBox自动选中所在行

如果需要兼容原有依赖SelectedItem的逻辑,可以通过查找可视化树的方式,点击CheckBox时主动选中当前行:

  1. 先添加查找父控件的辅助方法
using System.Windows.Media;

private T FindVisualParent<T>(DependencyObject child) where T : DependencyObject
{
    DependencyObject parentObject = VisualTreeHelper.GetParent(child);
    if (parentObject == null) return null;
    T parent = parentObject as T;
    return parent ?? FindVisualParent<T>(parentObject);
}
  1. 给CheckBox添加预览鼠标按下事件,主动选中当前行
    XAML修改:
<CheckBox Margin="5, 0" IsChecked="{Binding loaded}" 
          Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"
          PreviewMouseDown="CheckBox_PreviewMouseDown"/>

对应事件实现:

private void CheckBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var listViewItem = FindVisualParent<ListViewItem>((DependencyObject)sender);
    if (listViewItem != null)
    {
        listView1.SelectedItem = listViewItem.DataContext;
        listViewItem.IsSelected = true;
    }
}

获取所有已勾选的条目

WPF原生没有内置CheckedItems属性,但你已经将CheckBox的选中状态绑定到了数据源的loaded字段,直接遍历数据源筛选即可,比WinForms的实现更灵活:

// 假设你绑定的数据源集合名为moduleList
var checkedItems = moduleList.Where(m => m.loaded).ToList();

// 如果没有存数据源变量,也可以直接从ListView的Items中获取
var checkedItems = listView1.Items.Cast<module>().Where(m => m.loaded).ToList();

注意:如果需要实现修改loaded字段时界面自动同步,你的module类需要实现INotifyPropertyChanged接口。

内容的提问来源于stack exchange,提问作者Meme Machine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:39:00