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

Avalonia DataGrid加载数据时触发StackOverflow异常的原因排查求助

Avalonia DataGrid加载数据时触发StackOverflow异常的原因排查求助

大家好,我最近在做一个Avalonia MVVM项目,遇到了个棘手的问题——点击按钮加载数据到DataGrid时,直接抛出了StackOverflow异常。翻来覆去检查了好几遍代码,还是没找到问题根源,想请大家帮忙看看哪里出错了!

我的代码文件如下:

MainWindow.axaml:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:SalesApp.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="SalesApp.Views.MainWindow"
        x:DataType="vm:MainWindowViewModel"
        Icon="/Assets/avalonia-logo.ico"
        Title="SalesApp">

    <Design.DataContext>
          <vm:MainWindowViewModel/>
    </Design.DataContext>

    <Border Classes="card">
            <StackPanel Spacing="10">
                <TextBlock Text="{Binding DateSales.Count, StringFormat='عدد الأيام: {0}'}" Classes="title"/>
                <Button Content="AddNew" Command="{Binding LoadDataCommand}"/>
                <DataGrid ItemsSource="{Binding DateSales, Mode=OneWay}" 
                          AutoGenerateColumns="False" 
                          IsReadOnly="True"
                          CanUserReorderColumns="True"
                          CanUserResizeColumns="True"
                          CanUserSortColumns="True"
                          GridLinesVisibility="All">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="التاريخ" Binding="{Binding Date, StringFormat='{}{0:dd-MM-yyyy}'}"/> 
                        <DataGridTextColumn Header="عدد الطلبات" Binding="{Binding OrderCount}"/>
                        <DataGridTextColumn Header="إجمالي الإيرادات" Binding="{Binding TotalRevenue}"/>
                        <DataGridTextColumn Header="عدد المنتجات" Binding="{Binding ItemsCount}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </StackPanel>    
        </Border>
</Window>

MainWindowViewModel.cs:

namespace SalesApp.ViewModels;

using System;
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

public class SalesByDateDto
{    
    public DateTime Date { get; set; }
    public int OrderCount { get; set; }
    public decimal TotalRevenue { get; set; }

    public int ItemsCount { get; set; }
}

public partial class MainWindowViewModel : ViewModelBase
{
    [ObservableProperty]
    private ObservableCollection<SalesByDateDto> dateSales = new();
    
    public string Greeting { get; } = "Welcome to Avalonia!";

    [RelayCommand]
    private void LoadData()
    {
        // Simulate loading data
        DateSales = new ObservableCollection<SalesByDateDto>
        {
            new SalesByDateDto { Date = DateTime.Today, OrderCount = 10, TotalRevenue = 1000m, ItemsCount = 50 },
            new SalesByDateDto { Date = DateTime.Today.AddDays(-1), OrderCount = 8, TotalRevenue = 800m, ItemsCount = 40 },
            new SalesByDateDto { Date = DateTime.Today.AddDays(-2), OrderCount = 12, TotalRevenue = 1200m, ItemsCount = 60 }
        };

    }
}

app.axaml:

<Application xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="SalesApp.App"
             xmlns:local="using:SalesApp"
             RequestedThemeVariant="Default">
             <!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->

    <Application.DataTemplates>
        <local:ViewLocator/>
    </Application.DataTemplates>
  
    <Application.Styles>
        <FluentTheme />
        <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>
    </Application.Styles>
</Application>

问题复现步骤:

  • 使用的Avalonia版本是 11.3.12
  • 操作系统是 Ubuntu 24.04.4 LTS

我通过以下命令创建项目并安装依赖:

dotnet new avalonia.mvvm -o SalesApp
cd SalesApp
dotnet package update
dotnet package add Avalonia.Controls.DataGrid

替换成上面的代码文件后,运行程序点击"AddNew"按钮就会触发StackOverflow异常。有没有大佬能帮我定位下问题呀?

备注:内容来源于stack exchange,提问作者Ibram Reda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:08:09