enisn / UraniumUI

Uranium is a Free & Open-Source UI Kit for MAUI.
Apache License 2.0
1.13k stars 131 forks source link

TabView doesn't render ListView on tab change. #461

Open tartuff22 opened 11 months ago

tartuff22 commented 11 months ago

Version 2.5.6. TabView renders ListView the first time, but not upon changing tabs. If you tap on the page and pull down then content appears. See example: "https://youtube.com/shorts/TeRTr3C25F4"

Here's xaml: ` <?xml version="1.0" encoding="utf-8" ?> <views:BaseDetailPage x:TypeArguments="jobs:JobDetailViewModel" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit" xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls" xmlns:jobs="clr-namespace:NXTransport.ViewModels.Jobs" xmlns:converters="clr-namespace:NXTransport.Converters" xmlns:views="clr-namespace:NXTransport.Views" xmlns:material="http://schemas.enisn-projects.io/dotnet/maui/uraniumui/material"
x:DataType="jobs:JobDetailViewModel" x:Class="NXTransport.Views.JobDetailPage" x:Name="JobDetailPageContent" Title="{ Binding Title }">

<material:TabView x:Name="Root">
    <material:TabItem Title="Details">
        <material:TabItem.Content>

            <StackLayout Padding="8">
                <Label Text="Details" />
                <ListView ItemsSource="{Binding JobDetails}" VerticalOptions="FillAndExpand" HasUnevenRows="True" SeparatorVisibility="None" Footer="" CachingStrategy="RecycleElement">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="150" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>

                                    <Label Grid.Row="0" Grid.Column="0" Text="{Binding ., Converter={StaticResource JObject}, ConverterParameter=label}" 
                                            IsVisible="{Binding ., Converter={StaticResource IsValidString}, ConverterParameter=Label}" 
                                            FontAttributes="Bold" FontSize="Small" Margin="2" />

                                    <Label Grid.Row="0" Grid.Column="1" Text="{Binding ., Converter={StaticResource JObject}, ConverterParameter=text}" 
                                            IsVisible="{Binding ., Converter={StaticResource IsValidString}, ConverterParameter=Label}" 
                                            FontSize="Small" Margin="2" />

                                    <BoxView Grid.ColumnSpan="2" Margin="0,8,0,8" HeightRequest="1" BackgroundColor="{StaticResource Key=MenuDividerColor}" VerticalOptions="Center" 
                                            IsVisible="{Binding ., Converter={StaticResource IsNotValidString}, ConverterParameter=Label}" />

                                </Grid>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

                <Grid ColumnSpacing="4" RowSpacing="4" HorizontalOptions="FillAndExpand" VerticalOptions="End" IsVisible="{ Binding IsNew }">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <Button Grid.Row="0" Grid.Column="0" Text="Accept" Command="{ Binding AcceptJobCommand }" IsVisible="{ Binding CanAccept }" BackgroundColor="{StaticResource Key=AcceptBackgroundColor}" TextColor="{StaticResource Key=AcceptTextColor}" HorizontalOptions="FillAndExpand"/>
                    <Button Grid.Row="0" Grid.Column="1" Text="Decline" Command="{ Binding DeclineJobCommand }"  IsVisible="{ Binding CanDecline }" BackgroundColor="{StaticResource Key=DeclineBackgroundColor}"  TextColor="{StaticResource Key=DeclineTextColor}" HorizontalOptions="FillAndExpand"/>
                </Grid>

                <Grid ColumnSpacing="4" RowSpacing="4" HorizontalOptions="FillAndExpand" VerticalOptions="End" IsVisible="{ Binding IsAvailable }">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <Button Grid.Row="0" Grid.Column="0" ImageSource="call_white" Command="{ Binding PhoneCommand }" IsEnabled="{ Binding CanPhone }" BackgroundColor="{Binding CanPhone, Converter={StaticResource EnabledToColor}, ConverterParameter={StaticResource ExtraBackgroundColor}}" TextColor="{StaticResource Key=ExtraTextColor}" HorizontalOptions="FillAndExpand"/>
                    <Button Grid.Row="0" Grid.Column="1" ImageSource="barcode_white" Command="{ Binding TrackAndTraceCommand }" IsEnabled="{ Binding CanTrackAndTrace }" BackgroundColor="{Binding CanTrackAndTrace, Converter={StaticResource EnabledToColor}, ConverterParameter={StaticResource ExtraBackgroundColor}}" TextColor="{StaticResource Key=ExtraTextColor}" HorizontalOptions="FillAndExpand"/>
                </Grid>

            </StackLayout>

        </material:TabItem.Content>
    </material:TabItem>

    <material:TabItem Title="Addresses">
        <material:TabItem.Content>
            <StackLayout>
                <ListView ItemsSource="{Binding JobAddresses}" VerticalOptions="FillAndExpand" HasUnevenRows="True" ItemTapped="SelectAddress"
                    Footer="" ios:ListView.SeparatorStyle="FullWidth" CachingStrategy="RecycleElement" SeparatorColor="{StaticResource Key=AddressDividerColor}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <Grid ColumnSpacing="2" RowSpacing="6" Margin="0">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>

                                    <Frame Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" BackgroundColor="{Binding ., Converter={StaticResource AddressStatusColor}}"
                            WidthRequest="6" Margin="0,0,4,0" CornerRadius="0" />

                                    <Image Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" WidthRequest="20" VerticalOptions="Center" Margin="0,0,4,0" Source="{Binding ., Converter={StaticResource AddressStatusImage}}"/>

                                    <Label Grid.Row="0" Grid.Column="2" Grid.RowSpan="2" VerticalOptions="Center" Margin="0,0,10,0" 
                                    Text="{Binding ., Converter={StaticResource AddressTypeString}}"
                                    TextColor="{Binding ., Converter={StaticResource AddressStatusColor}}" 
                                    FontSize="Medium" FontAttributes="Bold"/>

                                    <Label Grid.Row="0" Grid.Column="3" Text="{Binding ., Converter={StaticResource JObject}, ConverterParameter=PODSummary}" 
                                    FontAttributes="Bold" FontSize="Small" Margin="0,12,0,0" TextColor="{StaticResource Key=AddressSummaryTextColor}"/>

                                    <Label Grid.Row="1" Grid.Column="3" Text="{Binding ., Converter={StaticResource AddressTimeWindow}}" FontSize="Small" Margin="0,0,0,10" TextColor="{StaticResource Key=AddressWindowTextColor}"/>

                                    <Image Grid.Row="0" Grid.Column="4" WidthRequest="20" Source="barcode_gray" IsVisible="{Binding ., Converter={StaticResource AddressScanRequired}}" 
                                    Margin="0,10,10,0" VerticalOptions="Start" />

                                    <Image Grid.Row="1" Grid.Column="4" WidthRequest="20" Source="signature_gray" IsVisible="{Binding ., Converter={StaticResource AddressSignatureRequired}}" 
                                    Margin="0,0,10,10" VerticalOptions="End" />
                                </Grid>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackLayout>
        </material:TabItem.Content>
    </material:TabItem>

</material:TabView>

</views:BaseDetailPage> `

enisn commented 11 months ago

Sorry, I couldn't reproduce this problem on my side, but can you try to set CachingStrategy as CacheOnLayout for TabView?

<material:TabView CachingStrategy="CacheOnLayout">