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