Avalonia DataGrid无显示问题求助(MVVM项目)
Avalonia DataGrid 无内容渲染的修复方案
1. 消除自动生成列与手动列的冲突
你同时启用了AutoGenerateColumns="True"和手动定义列,这会导致DataGrid的列渲染逻辑冲突,建议关闭自动生成列:
<DataGrid ItemsSource="{Binding Expenses}" AutoGenerateColumns="False" <!-- 修改此处 --> HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="20" Background="Blue"> <DataGrid.Columns> <DataGridTextColumn Header="Id" Binding="{Binding Id}"/> <DataGridTextColumn Header="Amount" Binding="{Binding Amount}" /> </DataGrid.Columns> </DataGrid>
2. 修正ViewModel的属性通知逻辑
你的ViewModel继承了ViewModelBase(CommunityToolkit.Mvvm提供的基类,已实现INotifyPropertyChanged),无需重复声明该接口;同时ObservableCollection本身会自动触发集合变更通知,[ObservableProperty]也会自动生成属性变更通知,无需手动调用OnPropertyChanged:
public partial class AddExpensePageViewModel : ViewModelBase { [ObservableProperty] private Expense _newExpense = new Expense(); [ObservableProperty] private List<ExpenseCategory> _categories = GlobalData.Instance.ExpenseCategories; [ObservableProperty] private ObservableCollection<Expense> _expenses = new ObservableCollection<Expense>(GlobalData.Instance.Expenses); public AddExpensePageViewModel() { } [RelayCommand] private void AddExpense() { GlobalData.Instance.Expenses.Add(_newExpense); _expenses.Add(_newExpense); _newExpense = new Expense(); } }
3. 确保Expense类的属性可绑定
Expense类的Id、Amount等属性必须是公共属性,若需要动态更新内容,还需实现INotifyPropertyChanged(推荐使用CommunityToolkit.Mvvm的ObservableObject基类):
public partial class Expense : ObservableObject { [ObservableProperty] private int _id; [ObservableProperty] private decimal _amount; // 其他业务属性... }
4. 调整布局容器避免空间限制
StackPanel的布局特性可能导致DataGrid无法获得足够显示空间,建议将外层容器替换为Grid:
<UserControl ...> <UserControl.DataContext> <vm:AddExpensePageViewModel/> </UserControl.DataContext> <Grid> <DataGrid ItemsSource="{Binding Expenses}" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="20" Background="Blue"> <DataGrid.Columns> <DataGridTextColumn Header="Id" Binding="{Binding Id}"/> <DataGridTextColumn Header="Amount" Binding="{Binding Amount}" /> </DataGrid.Columns> </DataGrid> </Grid> </UserControl>
验证步骤
- 优先关闭
AutoGenerateColumns,这是最常见的冲突原因; - 确认Expense类的属性为公共可访问;
- 替换布局容器为Grid,确保DataGrid有足够的显示空间。
内容的提问来源于stack exchange,提问作者spressodev
相关产品推荐
相关产品推荐

