Éde*_*cha 5 c# performance collectionview xamarin xamarin.forms
我有一个显示聊天消息的集合视图,它有 10 个可能的数据模板。每个数据模板都包含一个 flexlayout(因为我需要在左侧或右侧水平对齐它,就像聊天气泡一样),在这些 flexlayouts 中,我们有一个单独的网格,可以显示图像、标签、地图或媒体播放器。它加载非常快,但滚动时非常慢。我试图取消 flexlayout,但网格不遵守我需要的 LayoutOptions End/Start,然后我用填充屏幕(水平)的 ContentView 交换了 FlexLayout,我能够水平对齐它的孩子。我注意到此更改没有性能改进,甚至可能变得更糟。此外,我已经阅读并按照优化应用程序性能的建议进行了更改,但似乎还不够。
下面我有我的collectionview标签和一个数据模板的例子,其他的非常相似,几乎没有区别。我的疑问是如何改进这种情况?
集合视图
<CollectionView x:Name="ChatCollectionView" SelectionMode="None" HorizontalScrollBarVisibility="Never" VerticalScrollBarVisibility="Always" ItemsUpdatingScrollMode="KeepLastItemInView" ItemTemplate="{StaticResource MsgTemplateSelector}" Margin="5,0,5,0" />
Run Code Online (Sandbox Code Playgroud)
数据模板之一
<DataTemplate x:Key="DefaultMsg">
<FlexLayout Direction="Row" MinimumWidthRequest="50" JustifyContent="{Binding MsgAlign}">
<Grid Padding="0" Margin="0,10,0,0">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="20"></RowDefinition>
</Grid.RowDefinitions>
<BoxView Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Grid.RowSpan="2" CornerRadius="5" BackgroundColor="{Binding MsgBg}" />
<Label Grid.Row="0" Grid.Column="0" Text="{Binding msg}" TextColor="Black" />
<Grid Grid.Row="1" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Grid.Row="0" TextColor="DarkGray" FontSize="12">
<Label.FormattedText>
<FormattedString>
<Span Text=" ">
<Span.FontFamily>
<OnPlatform x:TypeArguments="x:String" Android="Font-Awesome-Free-Solid.otf#FontAwesome5Free-Solid" iOS="FontAwesome5Free-Solid" />
</Span.FontFamily>
</Span>
<Span Text="{Binding date}" />
<Span Text=" at " />
<Span Text="{Binding hour}" />
</FormattedString>
</Label.FormattedText>
</Label>
<ActivityIndicator Grid.Column="1" Grid.Row="0" Color="#ff9000" HeightRequest="15" WidthRequest="15" IsRunning="{Binding sending}" IsVisible="{Binding sending}" HorizontalOptions="End" />
<Label Grid.Column="1" Grid.Row="0" Text="{Binding icon}" IsVisible="{Binding sent}" TextColor="{Binding IconColor}" FontSize="15" HorizontalOptions="End">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String" Android="Font-Awesome-Free-Solid.otf#FontAwesome5Free-Solid" iOS="FontAwesome5Free-Solid" />
</Label.FontFamily>
</Label>
</Grid>
</Grid>
</FlexLayout>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |