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单独使用时(正常显示):

内容的提问来源于stack exchange,提问作者Heitor Badotti
相关产品推荐
相关产品推荐

