avalonia datagrid 通过 selecteditem 属性绑定选中行数据,需设 selectionmode="single"、canuserselectrows="true",viewmodel 中属性须为可空引用类型且实现 inotifypropertychanged 并含 public set。

在 Avalonia 中,DataGrid 获取选中行数据主要通过 SelectedItem 属性实现绑定,但需注意其行为与 WPF 或其他框架略有差异:默认为单选,且绑定需配合 INotifyPropertyChanged 和正确设置 SelectionMode。
确保 DataGrid 启用单行选择模式
Avalonia DataGrid 默认是 Single 模式,但显式设置更稳妥。若未设置,可能因模板或样式干扰导致 SelectedItem 不触发更新:
- 在 XAML 中添加:
SelectionMode="Single" - 避免同时设置
SelectionUnit="Cell"(会禁用行级选中) - 确认
CanUserSelectRows="True"(默认为 true,但自定义模板时可能被覆盖)
ViewModel 中正确绑定 SelectedItem
SelectedItem 是可读写属性,需绑定到 ViewModel 中的**可空引用类型属性**(如 Person?),且该类型应实现 INotifyPropertyChanged:
- XAML 绑定示例:
{Binding SelectedPerson, Mode=TwoWay} - ViewModel 属性需含
set,否则选中后不会回传值 - 属性 setter 中建议调用
OnPropertyChanged(),确保 UI 可响应后续逻辑(如按钮启用状态)
处理多选场景(需手动获取)
Avalonia DataGrid 原生不支持 SelectedItems 多选绑定(截至 v11.x)。如需多选:
- 改用
SelectionMode="Extended" - 监听
SelectionChanged事件,在代码后台调用dataGrid.SelectedItems获取IList - 或在 ViewModel 中维护一个
ObservableCollection<t></t>,通过事件同步选中项(需注意线程和通知)
常见问题排查
如果绑定后 SelectedItem 始终为 null:
- 检查绑定路径是否拼写正确(区分大小写),且属性是 public
- 确认
DataGrid.ItemsSource已赋值且非空,否则无数据可选 - 避免在
DataGrid.RowStyle中误设IsSelected="{Binding IsSelected, Mode=TwoWay}"—— 这会干扰默认选择逻辑 - 调试时可在 setter 中加断点,验证是否被调用;也可临时用
MessageBox.Show(SelectedPerson?.Name)验证值










