✅ MAUI CollectionView Not Displaying

I am trying to get a data bound CollectionView to display in my MAUI app, so far only on Android, but when I navigate the content page hosting the view, only the header displays. I've searched a round a bit and can't seem to find anything that applies, so I'm throwing this out here so long.

Here is my whole content page:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:models="clr-namespace:Cts.Maui.Dx.Models"
             x:Class="Cts.Maui.Dx.ApplicationListPage">
    <ContentPage.BindingContext>
        <models:ApplicationListViewModel x:Name="ViewModel" />
    </ContentPage.BindingContext>
    <ContentPage.Content>
        <CollectionView ItemsSource="{Binding Data}">
            <CollectionView.Header>
                <Label Text="Header" />
            </CollectionView.Header>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Label Grid.Row="0" Text="{Binding LearnerDesc}" />
                        <Grid Grid.Row="1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <Label Grid.Column="0" Text="{Binding Originator}" />
                            <Label Grid.Column="1" Text="{Binding StartDate}" />
                            <Label Grid.Column="2" Text="{Binding IsLocked}" />
                        </Grid>
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </ContentPage.Content>
</ContentPage>

I populate the viewmodel from the page's Loaded event like this:

    private async void OnLoaded(object sender, EventArgs e)
    {
        var stream = await FileSystem.OpenAppPackageFileAsync("appList.json");
        var streamReader = new StreamReader(stream);
        ViewModel.LoadFromJson(await streamReader.ReadToEndAsync());
    }
...
    public void LoadFromJson(string json)
    {
        var apps = JsonSerializer.Deserialize<List<LicenseApplicationDto>>(json) ?? throw new InvalidOperationException("Deserialized to null");
        Data = apps;
        OnPropertyChanged();
    }

When I navigate to the page, my breakpoint in OnLoaded gets hit, and the JSON properly deserializes into 200 DTO's that look OK. I don't see any error messages logged for binding or anything, but the Android log is so busy it's kind of hard to tell. I know the page and collection view are loading because the text in the Header template displays, but that is all I can see on my device.
Was this page helpful?