Xamarin.Forms. Оптимизация ListView - PullRequest
0 голосов
/ 14 ноября 2018

Можете ли вы дать рекомендации по оптимизации ListView? При прокрутке тормозит. Мой viewCell выглядит так:

<Grid BackgroundColor="{Binding ListViewCustomizer.ItemBorderColor, Source={x:Static theme:ThemeManager.Theme}}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">

    <Grid Margin="0, 0, 0, 1" 
        BackgroundColor="{Binding ListViewCustomizer.ItemBackgroundColor, Source={x:Static theme:ThemeManager.Theme}}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
        <Grid.Triggers>
            <DataTrigger Binding="{Binding IsRead}" TargetType="Grid" Value="true">
                <Setter Property="BackgroundColor" Value="#bfe3fa" />
            </DataTrigger>
        </Grid.Triggers>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*" />
            <ColumnDefinition Width="4*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="6*"/>
            <RowDefinition Height="4*"/>
        </Grid.RowDefinitions>

        <ContentView Grid.RowSpan="2" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Margin="1, 1">
            <ffimageloading:CachedImage x:Name="mainImage" 
                                Source="news_placeholder.png" 
                                LoadingPlaceholder="news_placeholder.png"  
                                DownsampleToViewSize="false" 
                                CacheDuration="{x:Static constant:ImageConfig.PreviewImageCacheDuration}"
                                ErrorPlaceholder="news_placeholder.png" Aspect="AspectFill" 
                                HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
                                        Transformations="{Binding IsRead, Converter={StaticResource BoolToTransformationConverter}}">
                <ffimageloading:CachedImage.DownsampleHeight>
                    <extensions:OnDeviceType x:TypeArguments="x:Double" Phone="130" Tablet="200"/>
                </ffimageloading:CachedImage.DownsampleHeight>
            </ffimageloading:CachedImage>
        </ContentView>            

        <Grid Grid.Column="1" RowSpacing="0" Margin="10,10,10,0">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>

             <Label Style="{StaticResource BaseListItemLabelStyle}" FormattedText="{Binding ., Converter={StaticResource NewsItemToFormattedStringConveter}}"/>

            <ctrl:ExtendedLabel 
                Grid.Row="1"
                MultilineTrimming="True" 
                x:Name="content"
                Style="{StaticResource ListItemContentLabelStyle}" />
        </Grid>

    </Grid>
</Grid>

Может быть, что-то заменить. Может быть, я должен заменить все привязки на код-позади?

Помогите мне, пожалуйста.

1 Ответ

0 голосов
/ 14 ноября 2018

Вы упаковали довольно много вещей в эту ячейку просмотра. Кроме того, изменение привязки данных к коду не даст вам существенных преимуществ с точки зрения производительности.

То, что здесь происходит, заключается в том, что все эти элементы должны выполнять этапы макета, что требует времени (производительности). Теперь умножьте это на количество элементов в вашем ListView. Хорошая новость заключается в том, что этот коэффициент умножения будет в вашу пользу, как только вы улучшите свое представление, сделав меньше макетов.

Что бы я предложил:

1) Не используйте определения высоты «Авто», так как для этого потребуется несколько проходов макета, пока не будет определена окончательная высота

2) Сократите сетки до одной сетки и работайте со свойствами RowSpan и ColumnSpan, чтобы установить ваши элементы

3) Есть ли причина, по которой вы используете просмотр содержимого? Если я правильно помню, вы сможете поместить файл ffimageloading.cachedimage непосредственно в сетку.

Для получения дополнительной информации о том, как оптимизировать производительность макета форм xamarin, я рекомендую эту статью: https://xamarininsider.com/2017/08/03/optimizing-layout-performance-in-xamarin-forms/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...