Avalonia DataGrid如何实现多选 Avalonia SelectionMode
发布时间 - 2025-12-29 00:00:00 点击率:次Avalonia DataGrid 多选需设 SelectionMode="Extended" 并用 Behavior 绑定 SelectedItems;SelectedItem 仅表焦点行,SelectedItems 才存全部选中项;注意 NuGet 包、主题、集合类型及通知机制。
Avalonia DataGrid 默认不支持直接绑定多选集合,SelectionMode 仅控制选择行为模式(如单选、扩展多选),但不会自动同步选中项到 ViewModel。要实现真正可用的多选功能,需配合行为(Behavior)或手动监听事件完成双向同步。
设置 SelectionMode 为 Extended 或 Multiple
这是启用多选操作的前提。Extended 允许按 Ctrl/Shift 多选,Multiple 在 Avalonia 当前版本中效果等同于 Extended(官方文档与实际行为一致):
- 在 XAML 中设置:
SelectionMode="Extended" - 确保
CanUserSelectRows(默认为 true,但显式声明更稳妥)
="True" - 禁用
SelectionMode="Single"或未设置时,将无法进行多选操作
用 Behavior 绑定 SelectedItems
官方 DataGrid 不提供 SelectedItems 的依赖属性绑定,需借助自定义 Behavior 实现 MVVM 同步:
- 创建
DataGridSelectedItemsBehavior类,监听SelectionChanged事件 - 在后台代码中暴露
IList SelectedItems { get; set; }属性(推荐用ObservableCollection或INotifyCollectionChanged实现) - XAML 中通过
引入并绑定:
注意 SelectedItem 和 SelectedItems 的区别
SelectedItem 是单值绑定,仅反映当前“焦点行”;SelectedItems 才是真正被勾选的全部项集合(类型为 IList):
- 不要仅靠
SelectedItem判断多选结果 - 获取选中数据时,应转换为具体类型:
var selected = SelectedItems.Cast().ToList(); - 若绑定源是
ObservableCollection,建议在 ViewModel 中维护一个独立的ObservableCollection用于存储选中项,避免直接操作SelectedItems引发类型不匹配
避免常见陷阱
多选功能容易因配置疏漏失效:
- 忘记安装
Avalonia.Xaml.BehaviorsNuGet 包 → Behavior 无法解析 - 未在
App.axaml中引入Fluent.xaml或 DataGrid 主题 → 控件样式异常,部分交互不可见 - 绑定的
ItemsSource使用普通List而非ObservableCollection→ 数据更新后 UI 不响应,影响选择状态渲染 - ViewModel 属性未标记
[Reactive](若使用 ReactiveUI)或未实现INotifyPropertyChanged→SelectedItems变化无法通知 UI
# react
# app
# 区别
# var
# 事件
# ui
# 多选
# 绑定
# 或未
# 这是
# 自定义
# 不支持
# 而非
# 转换为
# 才是真正
# 勾选
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
如何快速查询网站的真实建站时间?
非常酷的网站设计制作软件,酷培ai教育官方网站?
Laravel如何实现多对多模型关联?(Eloquent教程)
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何实现用户注册和登录?(Auth脚手架指南)
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
如何快速上传自定义模板至建站之星?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
java中使用zxing批量生成二维码立牌
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Android GridView 滑动条设置一直显示状态(推荐)
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Bootstrap CSS布局之列表
实例解析Array和String方法
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
如何在服务器上三步完成建站并提升流量?
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
制作电商网页,电商供应链怎么做?
QQ浏览器网页版登录入口 个人中心在线进入
详解CentOS6.5 安装 MySQL5.1.71的方法
如何将凡科建站内容保存为本地文件?
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
如何用花生壳三步快速搭建专属网站?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
如何快速打造个性化非模板自助建站?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Linux后台任务运行方法_nohup与&使用技巧【技巧】
油猴 教程,油猴搜脚本为什么会网页无法显示?
Thinkphp 中 distinct 的用法解析
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Laravel如何处理文件下载请求?(Response示例)
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Java垃圾回收器的方法和原理总结
Python制作简易注册登录系统
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出


="True"