我有一个显示聊天消息的集合视图,它有 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=" "> …Run Code Online (Sandbox Code Playgroud) 我找到了一些例子,但对于java。
链接是:
<a href="whatsapp://send?text=message">
Run Code Online (Sandbox Code Playgroud)
MainPage.xaml.cs:
public void Webnav_Navigating(object sender, WebNavigatingEventArgs e)
{
string url = e.Url;
if (url.StartsWith("whatsapp://"))
{
// what I need here?
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个代码,允许用户选择一个文件,将一些有关它的信息添加到可观察的集合中并显示上传进度,完成后,它将图像绑定到图像视图。它立即可以正常工作,但如果重复该过程,则会引发异常:
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.43(intptr,intptr)
at at (wrapper native-to-managed) Android.Runtime.DynamicMethodNameCounter.43(intptr,intptr)
Run Code Online (Sandbox Code Playgroud)
插入新元素并获取其索引的代码
switch(x){
// some code...
case 6:
// .... some code
_ = Task.Run(async () => {
try
{
int i = default;
Msg newmsg2 = new Msg() { UploadProgress = 0.0, UploadProgressVisibility = true, IsImageSend = true, ImageSend = "@drawable/icon_default" };
valuesLock.EnterWriteLock();
try
{
// THE ISSUE IS …Run Code Online (Sandbox Code Playgroud) c# collections observablecollection xamarin indexoutofrangeexception