You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:10:29