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

来源:这里教程网 时间:2026-02-21 17:43:14 作者:

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

相关推荐

热文推荐