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

ContentPage嵌入CarouselView后CollectionView无法显示数据

问题:ContentPage嵌入CarouselView后CollectionView数据无法显示

我有一个包含CollectionView的ContentPage,单独运行时可正常加载并显示数据表查询结果,但将此ContentPage加入CarouselView后,数据虽能正常加载,却无法在UI界面中显示。以下是相关代码片段:

CarouselView部分XAML代码

<!-- Carousel View -->
<CarouselView x:Name="carouselView"
              Grid.Row="4"
              IsBounceEnabled="True"
              IsScrollAnimated="True"
              IsSwipeEnabled="True"
              Loop="False"
              IndicatorView="indicadorView"
              HorizontalOptions="FillAndExpand"
              CurrentItemChanged="OnCurrentItemChanged"
              Margin="0,0,0,10">
    <CarouselView.ItemsSource>
        <x:Array Type="{x:Type ContentPage}">
            <local:ValoresAditivo Title="Valores"/>
            <local:TabelaDocumentos Title="Documentos"/>
            <local:TabelaDevolvidos Title="Devolvidos"/>
            <local:TabelaPagamentos Title="Pagamentos"/>
        </x:Array>
    </CarouselView.ItemsSource>
    <CarouselView.ItemTemplate>
        <DataTemplate>
            <VerticalStackLayout>
                <Label Text="{Binding Title}"
                       HorizontalOptions="Center"
                       VerticalOptions="CenterAndExpand"
                       FontSize="Large"
                       TextColor="White"/>
            </VerticalStackLayout>
        </DataTemplate>
    </CarouselView.ItemTemplate>
</CarouselView>

CarouselView部分C#代码

public ObservableCollection<ContentPage> Pages { get; set; }
public ValoresAditivo ValoresAditivoPage { get; set; }
public TabelaDocumentos TabelaDocumentosPage { get; set; }
public TabelaDevolvidos TabelaDevolvidosPage { get; set; }
public TabelaPagamentos TabelaPagamentosPage { get; set; }

public AditivosCarousel()
{
    InitializeComponent();

    // 初始化页面
    ValoresAditivoPage = new ValoresAditivo();
    TabelaDocumentosPage = new TabelaDocumentos();
    TabelaDevolvidosPage = new TabelaDevolvidos();
    TabelaPagamentosPage = new TabelaPagamentos();


    Pages =
    [
        ValoresAditivoPage,
        TabelaDocumentosPage,
        TabelaDevolvidosPage,
        TabelaPagamentosPage
    ];

    carouselView.ItemsSource = Pages;
}
private void OnCurrentItemChanged(object sender, CurrentItemChangedEventArgs e)
{
    var selectedPage = e.CurrentItem as ContentPage;
    if (selectedPage != null)
    {
        contentArea.Content = selectedPage.Content;

        // 注释代码:若为指定页面则加载数据
        // if (selectedPage is TabelaDocumentos tabelaDocumentosPage)
        // {
        //     tabelaDocumentosPage.BindingContext = tabelaDocumentosPage.viewModel;
        //     LoadTabela(16);
        // }

    }
}
private async void NroAditivoValueChanged(object sender, ValueChangedEventArgs e)
{
    // 验证组件及输入有效性
    if (entryNumeroAdt != null && !string.IsNullOrEmpty(entryNumeroAdt.Text) && int.TryParse(entryNumeroAdt.Text, out _))
    {
        if (resultsAdts != null)
        {
            var filteredResults = resultsAdts.Results.Where(r => r.Aditivo == stepperNumeroAdt.Value).ToList();

            if (filteredResults.Any())
            {
                // 加载选中附加项的所有数据
                var aditivo = filteredResults.First();
                var ID_Aditivo = aditivo.ID_Aditivo ?? 0;

                // 更新控件数据
                ValoresAditivoPage.CarregarValores(Convert.ToInt64(stepperNumeroAdt.Value), aditivo);

                // 加载文档数据
                await TabelaDocumentosPage.LoadTabela(ID_Aditivo);              

                // 加载退回数据
                await TabelaDevolvidosPage.LoadTabela(ID_Aditivo);
            }
            else
            {
                Debug.WriteLine("未找到Aditivo值为 " + stepperNumeroAdt.Value + " 的结果。");
            }
        }
        else
        {
            Debug.WriteLine("resultsAdts未初始化。");
        }
    }
}

TabelaDocumentos页面C#代码

public partial class TabelaDocumentos : ContentPage
{
    private DocumentosViewModel viewModel;

    private ObservableCollection<SearchResultAditivoDocumentos> AditivosDocumentos;

    public TabelaDocumentos()
    {
        InitializeComponent();
        viewModel = new DocumentosViewModel();
        BindingContext = viewModel;
    }

    public async Task LoadTabela(long ID_Aditivo)
    {
        // 清空数据
        viewModel.AditivosDocumentos.Clear();
        
        // 无附加项则返回
        if (ID_Aditivo == 0) return;
        
        try
        {
            // 加载文档数据
            Debug.WriteLine("ID_Aditivo: " + ID_Aditivo.ToString());
        
            var documentos = await PesquisarDB.SearchAditivoDocumentosAsync(ID_Aditivo.ToString());
            if (documentos != null)
            {
                foreach (var item in documentos)
                {
                    viewModel.AditivosDocumentos.Add(item);
                }
            }
        
            Debug.WriteLine("文档表数据行数: " + viewModel.AditivosDocumentos.Count.ToString());

            OnPropertyChanged(nameof(viewModel.AditivosDocumentos));  
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"加载文档表失败,错误信息: {ex.Message}");
        }
    }

    private async void Teste_Clicked(object sender, EventArgs e)
    {
       await LoadTabela(16);
    }
}

TabelaDocumentos页面XAML绑定

<CollectionView ItemsSource="{Binding AditivosDocumentos}" HorizontalOptions="FillAndExpand">

界面效果对比

  • ContentPage嵌入CarouselView时(无法显示):
    ContentPage嵌入CarouselView时

  • ContentPage单独使用时(正常显示):
    ContentPage单独使用时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:50:11