Avalonia DataGrid初始化为空,排序后才显示数据问题求助
问题分析与解决
问题原因
你的Lines属性是普通自动属性,未实现INotifyPropertyChanged变更通知。尽管ObservableCollection本身会通知集合内元素的变化,但ViewModel的Lines属性在构造函数中赋值时,无法触发Avalonia绑定系统的更新。在AvaloniaUI 11.0.0-preview7的DataGrid实现中,存在绑定初始化时机的问题,导致初始绑定获取的是未赋值状态,而排序操作会强制DataGrid重新刷新数据源,从而显示数据。
解决方案
有两种方式可以修复该问题:
方式1:使用MVVM Community Toolkit的[ObservableProperty]特性(推荐)
通过特性自动生成带变更通知的属性,无需手动编写通知逻辑:
public partial class MainWindowViewModel : ViewModelBase { [ObservableProperty] private ObservableCollection<LineViewModel> _lines; public MainWindowViewModel() { var lineViewModel = new LineViewModel(); Lines = new ObservableCollection<LineViewModel>() { lineViewModel }; } }
方式2:手动实现属性变更通知
利用ViewModelBase继承的ObservableObject提供的SetProperty方法,手动触发变更通知:
public class MainWindowViewModel : ViewModelBase { private ObservableCollection<LineViewModel> _lines; public ObservableCollection<LineViewModel> Lines { get => _lines; set => SetProperty(ref _lines, value); } public MainWindowViewModel() { var lineViewModel = new LineViewModel(); Lines = new ObservableCollection<LineViewModel>() { lineViewModel }; } }
额外建议
AvaloniaUI 11的预览版存在一些已知绑定问题,升级到最新稳定版大概率能避免这类问题,建议尝试更新NuGet包至官方稳定版本。
内容的提问来源于stack exchange,提问作者Julien BERNARD
相关产品推荐
相关产品推荐

