我正在使用 AvaloniaUI 11.0.0-preview7、.NET 7、MVVM 社区工具包。
实例化
DataGrid
并将 ItemsSource
绑定到 ObservableCollection
时,它会显示为空,直到我对列进行排序。
查看:
<DataGrid Name="MyDataGrid" ItemsSource="{Binding Lines}">
<DataGrid.Columns>
<DataGridTextColumn Header="Index" Binding="{Binding Index}" IsReadOnly="True" Width="*"/>
[...]
</DataGrid.Columns>
</DataGrid>
视图模型:
public class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<LineViewModel> Lines { get; set; }
public MainWindowViewModel() {
_lineViewModel = new LineViewModel();
Lines = new ObservableCollection<LineViewModel>() {_lineViewModel };
}
private LineViewModel _lineViewModel;
}
public partial class LineViewModel : ViewModelBase {
public LineViewModel()
{
Option = new ObservableCollection<string>() { "Foo", "Bar" };
}
[ObservableProperty]
private int _index;
public ObservableCollection<string> Option { get; set; }
}
我看不出我正在做的事情与在线资源有什么不同,也不知道是什么导致了这种行为。 调试
Lines
getter 确认它被调用一次,并在此之前使用一个 LineViewModel
项进行初始化。
我创建了一个示例项目来隔离该问题:https://github.com/JulienBernard3383279/AvaloniaPad
为什么数据网格最初显示为空?
在我的例子中,这是因为我将 DataGrid 放在 StackPanel 中,并且在添加项目时它没有调整 DataGrid 的大小。设置高度似乎可以修复它。
我在查看类似问题时偶然发现了这个问题。
JellyO的评论解决了这个问题。但我不想明确设置高度。
所以我玩了一下,想分享结果,以防其他人不想明确设置高度。
当 TabControl 内的
DataGrid
内有 StackPanel
且方向设置为垂直时,DataGrid 最初显示为空。
调整窗口大小后,它就被修复了。 在 TabControl 中切换选项卡时,它是固定的。 但是:当从表包含 1 个项目的选项卡切换到表应包含 2 个项目的选项卡时,只会显示 1 个项目。
这个问题好像只有当
StackPanel.Orientation
设置为Vertical
时才会出现。
我尝试过多种嵌套深度和嵌套星座。问题仍然存在,如果在 DataGrid 上方的任何级别上,都有一个方向为
StackPanel
的
Vertical
当 DataGrid 位于
DockPanel
中时,也会出现此问题,但前提是 DataGrid
使用 DockPanel.Dock
属性。如果设置为无论如何。这个问题是可以观察到的。
除了明确设置高度(这似乎是 DataGrid 的推荐做法(抱歉,我没有为此保存源代码))之外,还可以在 DataGrid 上设置
VerticalScrollBarVisibility="Visible"
。
我不知道为什么它会这样做,但这解决了它,没有设置特定的高度。