Avalonia DataGrid怎么获取选中的行数据 Avalonia SelectedItem绑定

1次阅读

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

Avalonia DataGrid怎么获取选中的行数据 Avalonia SelectedItem绑定

在 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) 验证值
text=ZqhQzanResources