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

MAUI中ListView的Label内容不显示问题求助

问题分析与解决方案

核心问题总结

你的代码存在三个关键问题导致ListView内容无法显示:

  1. 数据模型类访问修饰符错误,XAML绑定无法识别internal类的属性
  2. Meeting类的属性定义存在语法错误
  3. ListView与ScrollView嵌套导致布局高度计算异常

分步修复方案

1. 修改模型类的访问修饰符

XAML绑定要求目标类和属性必须是**公共(public)**的,当前AllMeetings和Meeting均为internal,会直接导致绑定失效。修改如下:

AllMeetings.cs

using System.Collections.ObjectModel;

namespace App.Models;

public class AllMeetings
{
    public ObservableCollection<Meeting> Meetings { get; set; } = new ObservableCollection<Meeting>();

    public void Add_Meeting(Meeting meeting)
    {
        this.Meetings.Add(meeting);
    }
}

Meeting.cs

namespace App.Models;

public class Meeting
{
    // 去掉属性末尾多余的分号
    public string Name { get; set; }
}

2. 修复布局嵌套问题

ListView本身自带滚动功能,嵌套在ScrollView中会导致ListView无法正确计算自身高度,进而无法显示内容。推荐移除外层ScrollView,调整布局参数:

MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:App.Views"
             x:Class="App.Views.MainPage">

    <VerticalStackLayout
        Spacing="25"
        Padding="30,0"
        VerticalOptions="Fill">

        <Button
            x:Name="CounterBtn"
            Text="Click me"
            SemanticProperties.Hint="Counts the number of times you click"
            Clicked="OnCounterClicked"
            HorizontalOptions="Center" />

        <!-- 设置VerticalOptions为FillAndExpand,让ListView占满剩余页面空间 -->
        <ListView ItemsSource="{Binding Meetings}" VerticalOptions="FillAndExpand">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding Name}" />
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

    </VerticalStackLayout>
</ContentPage>

3. 可选:增强绑定通知(INotifyPropertyChanged)

虽然当前ObservableCollection已能自动通知集合变化,但如果后续需要动态修改Meetings属性,建议给AllMeetings实现INotifyPropertyChanged接口:

AllMeetings.cs

using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace App.Models;

public class AllMeetings : INotifyPropertyChanged
{
    private ObservableCollection<Meeting> _meetings = new ObservableCollection<Meeting>();
    public ObservableCollection<Meeting> Meetings
    {
        get => _meetings;
        set
        {
            _meetings = value;
            OnPropertyChanged();
        }
    }

    public void Add_Meeting(Meeting meeting)
    {
        this.Meetings.Add(meeting);
    }

    public event PropertyChangedEventHandler? PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

验证修复效果

修改完成后,点击按钮时Meeting对象会被正确添加到集合中,ListView会自动更新并显示每个对象的Name属性,设置固定文本(如"hoge")也能正常显示。

内容的提问来源于stack exchange,提问作者musako

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:04:02