ListView项不存在';t扩展Xamarin形式中的折叠高度

ListView项不存在';t扩展Xamarin形式中的折叠高度,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我有一个列表视图。在ListView中,我有ListViewCell。ListViewCell具有展开和折叠功能。膨胀-坍塌行为中几乎没有问题 1-如果我展开第一项,它工作正常。但若我先展开第二项,再展开第一项,第一项就落后了。请参见屏幕截图中的案例1 2-如果我点击列表视图项,它会以灰色显示一秒钟。我想阻止这一切。当用户点击任何单元格时,它不应该改变颜色。案例2 3-如果我展开第一项并再次折叠它。它会折叠,但会在第二项和第一项之间保留空白 我注意到了这种行为。如果我向下和向上滚动,上述问题将得

我有一个列表视图。在ListView中,我有ListViewCell。ListViewCell具有展开和折叠功能。膨胀-坍塌行为中几乎没有问题

1-如果我展开第一项,它工作正常。但若我先展开第二项,再展开第一项,第一项就落后了。请参见屏幕截图中的案例1

2-如果我点击列表视图项,它会以灰色显示一秒钟。我想阻止这一切。当用户点击任何单元格时,它不应该改变颜色。案例2

3-如果我展开第一项并再次折叠它。它会折叠,但会在第二项和第一项之间保留空白

我注意到了这种行为。如果我向下和向上滚动,上述问题将得到解决。在理想情况下,用户不会在每次操作后上下滚动:D

注意:我在ListViewCell中有条目、日期选择器和按钮。用户必须能够在其中输入

这是我的密码。我还附上了屏幕截图。请建议

主页列表视图 截图

之所以发生这种情况,是因为只有在第一次渲染时才计算单元格的高度。之后,更改仅影响内部布局视图

尝试调用
ForceUpdateSize()在当前
tapped命令的逻辑末尾。它将强制整个单元格重新计算其边界

代码应该如下所示:

private void LabelOpenCommand(object sender,TappedEventArgs e)
{
    if (LabelCollapse.Text == "+")
    {
        FrameVisible.IsVisible = false;
        LabelCollapse.Text = "-";
        FrameVisible.IsVisible = true;
    }
    else
    {
        FrameVisible.IsVisible = true;
        LabelCollapse.Text = "+";
        FrameVisible.IsVisible = false;
    }

    ForceUpdateSize
}

希望有帮助。

谢谢
ForceUpdateSize
需要2-3秒才能获得更新的大小。通常情况下,手风琴手不应该花时间,因为有操作存在,而应该隐藏表演。所以,如果有人问我为什么要花时间,我很难解释。请提出你的想法!事实上,这不需要太多时间。整个
ViewCell
看起来很重,但即使这样2-3秒也是不可接受的。您是否尝试过异步执行此操作?“你是在为谁说话吗?”迪戈拉法尔苏扎我也看过了。这是第一次,需要1-2秒,我想这很好。如果用户尝试展开折叠2-3次,则会变得非常缓慢,需要3-4秒才能展开折叠。此延迟问题仅适用于iOS。它在UWP和Android中运行良好。我认为它应该在iOS中运行良好,因为它是我们的主要目标。您提到了异步。我该怎么做?我已经把你们在回答中给出的确切代码写下来了。你能用异步代码更新你的答案吗?谢谢。对不起,我迟到了。只需将该方法的签名更改为
private async void labelopecommand(…){…}
。我没有在iOS上尝试过,只是在android上,而且它的响应速度足够快。@Diegrafaelsouza,这没有任何改变。是的,你是对的,它在Android中运行得非常快。在iOS中仍然需要时间。我尝试将此行
CachingStrategy=“RecycleElement
放在我的Listview中,它开始工作正常。但是它引发了另一个问题:当我展开第一个项目(viewcell)时,它也会展开下一个屏幕上的其他单元格。有什么建议吗?
<StackLayout Margin="0" Padding="0">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <!-- Blue heading-->
        <StackLayout Margin="0" Padding="0" Grid.Row="0" BackgroundColor="#367fa9">
            <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" 
      Padding="15" RowSpacing="10" Margin="0" BackgroundColor="Transparent">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                </Grid.RowDefinitions>

                <Label Text="{Binding Name}" HorizontalOptions="Center" Grid.Column="0" Grid.Row="0"/>
                <Label Text="{Binding Date}" HorizontalOptions="Center" Grid.Column="1" Grid.Row="1"/>
                <Label Text="+" HorizontalOptions="End" VerticalOptions="Center" Grid.Column="2" x:Name="LabelCollapse" Grid.Row="0" Grid.RowSpan="2" FontFamily="Roboto">
                    <Label.GestureRecognizers>
                        <TapGestureRecognizer Tapped="LabelOpenCommand"/>
                    </Label.GestureRecognizers>
                </Label>
            </Grid>
        </StackLayout>
        <StackLayout Margin="0" Padding="0" Grid.Row="1" x:Name="FrameVisible">
            <Frame Margin="0" Padding="0" HorizontalOptions="FillAndExpand" BackgroundColor="White" OutlineColor="Gray">
                <StackLayout Margin="0" VerticalOptions="Fill" Padding="20" IsVisible="{Binding IsWeekly}">
                    <Grid>
                        <Grid.Resources>
                            <ResourceDictionary>
                                <local:InvertBooleanConverter x:Key="invertBooleanConverter" />
                                <Style x:Key="LabelStyle" TargetType="Label">
                                    <Setter Property="FontSize" Value="15"/>
                                    <Setter Property="FontFamily" Value="Roboto"/>
                                    <Setter Property="TextColor" Value="White"/>
                                </Style>
                            </ResourceDictionary>
                        </Grid.Resources>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="125"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="auto"></RowDefinition>
                            <RowDefinition Height="auto"></RowDefinition>
                            <RowDefinition Height="auto"></RowDefinition>
                            <RowDefinition Height="auto"></RowDefinition>
                            <RowDefinition Height="auto"></RowDefinition>
                        </Grid.RowDefinitions>
                        <Image Source="EditLog.png" Grid.Column="1" Grid.Row="0" HorizontalOptions="End" VerticalOptions="Center"
                                HeightRequest="24">
                            <Image.GestureRecognizers>
                                <TapGestureRecognizer Tapped="OnImageViewItemTapped"/>
                            </Image.GestureRecognizers>
                        </Image>
                        <Label Text="Date" Grid.Column="0" Grid.Row="0" Style="{StaticResource LabelStyle}" 
                               TextColor="Black" FontFamily="Roboto" Margin="0" />
                        <local:ExtendedDatePicker TextColor="LightGray" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1"
                            IsEnabled="False" Date="{Binding Date}" BackgroundColor="White">
                            <DatePicker.Format>dd/MM/yyyy</DatePicker.Format>
                        </local:ExtendedDatePicker>

                        <Label Text="Pay" Grid.Column="0" Grid.Row="2"  Style="{StaticResource LabelStyle}"
                               TextColor="Black" FontFamily="Roboto" Margin="0,10,0,0" />

                        <local:CustomEntry Grid.Column="0" Grid.Row="3" Margin="0,10,0,0" WidthRequest="150" Text="{Binding Pay}"
                            Style="{StaticResource LabelStyle}" TextColor="Black"  HorizontalOptions="EndAndExpand" VerticalOptions="FillAndExpand"/>

                        <Button Text="Submit" BorderRadius="18" TextColor="White" Command="{Binding SubmitWeeklyCommand}" Grid.Column="0" Grid.Row="4" FontFamily="Roboto"/>
                    </Grid>
                </StackLayout>
            </Frame>
        </StackLayout>
    </Grid>
</StackLayout>
private void LabelOpenCommand(object sender,TappedEventArgs e)
{
    if (LabelCollapse.Text == "+")
    {
        FrameVisible.IsVisible = false;
        LabelCollapse.Text = "-";
        FrameVisible.IsVisible = true;
    }
    else
    {
        FrameVisible.IsVisible = true;
        LabelCollapse.Text = "+";
        FrameVisible.IsVisible = false;
    }
}
private void LabelOpenCommand(object sender,TappedEventArgs e)
{
    if (LabelCollapse.Text == "+")
    {
        FrameVisible.IsVisible = false;
        LabelCollapse.Text = "-";
        FrameVisible.IsVisible = true;
    }
    else
    {
        FrameVisible.IsVisible = true;
        LabelCollapse.Text = "+";
        FrameVisible.IsVisible = false;
    }

    ForceUpdateSize
}