Я предполагаю, что эта ячейка представления является пузырем сообщения.
Когда вы делаете:
Messages.Add(new ChatMessageModel() { Text = args.Response.Text, User = App.ChatBot });
Ваша коллекция обновляется, и ваш ListView или любой другой объект, содержащий эти ViewCelss, также обновляется. , ActivityIndicator
является частью ViewCell
, поэтому оно приходит одновременно с сообщением.
[ВАРИАНТ 1] Использование дополнительного флага
Что вы можно создать флаг IsBusy
или IsDelay
или что-то еще и связать с ним видимость ActivityIndicator и Label:
<Grid x:Name="Gridoo">
<pancake:PancakeView
Margin="10,10,80,10"
Padding="15"
BackgroundColor="#53ffc6"
CornerRadius="20,20,0,20"
HasShadow="False"
HorizontalOptions="StartAndExpand">
<Label
FontSize="Medium"
Text="{Binding Text}"
TextColor="#1a1a1a"
IsVisible="{Binding IsBusy, Converter={Helpers:InverseBoolConverter}}""> />
</pancake:PancakeView>
<ActivityIndicator x:Name="activityIndicator" IsRunning="True" IsVisible="{Binding IsBusy}" />
</Grid>
Обратите внимание, что я использовал IValueConverter
для отрицания значения для этикетки. Если вы с ним не знакомы, отметьте this
Осталось добавить флаг в ваш ViewModel
:
IsBusy = true; // this will make the activity indicator visible, but not the Label
// Also note that you first need to add the message
Messages.Add(new ChatMessageModel() { Text = args.Response.Text, User = App.ChatBot });
await Task.Delay(1500);
IsBusy = false; // this will hige the activity indicator visible, and make Label visible
Так что в основном лог c следующее:
- Вы добавляете сообщение в свой чат, НО фактический текст скрыт, когда, с другой стороны, индикатор активности виден.
- Вы применяете delay
- Задержка заканчивается, вы меняете видимость обоих представлений.
Обратите внимание, что в моем примере я не объявил, где находится этот флаг, так как я не уверен, как остальные вашего кода выглядит так. Его можно добавить в ChatMessageModel или ChatMessageViewModel
, так как вам потребуется флаг для каждого сообщения.
[ВАРИАНТ 2] в IncomingMessageItemControl.xaml.cs
Лучше Решением может быть обращение с ним в коде вашего контроля. Проблема та же, индикатор активности и метка появляются одновременно.
Чтобы исправить это, вы можете переместить задержку в IncomingMessageItemControl.xaml.cs
. Сначала вам нужно добавить x:Name
и к индикатору активности, и к метке.
Затем вы можете сделать:
private async Task ChangeVisibilityAsync()
{
Label.IsVisibe= false;
ActivityIndicator.IsVisible = true;
await Task.Delay(1500);
Label.IsVisibe = true;
ActivityIndicator.IsVisible = false;
}