【发布时间】:2021-04-19 14:37:23
【问题描述】:
我正在制作一个带有聊天功能的应用程序,我想要实现的是对于每条新消息,底部的Listview 都会更新。这是我尝试过的:
private ViewModel viewModel { get; set; }
protected override async void OnAppearing()
{
base.OnAppearing();
await viewModel.Connect();
viewModel.RefreshScrollDown = () => {
if (viewModel.Messages.Count > 0)
{
Device.BeginInvokeOnMainThread(() => {
listMessages.ScrollTo(viewModel.Messages[viewModel.Messages.Count - 1], ScrollToPosition.End, true);
});
}
};
}
列表视图:
<ListView
x:Name="MessagesList"
BackgroundColor="Transparent"
HasUnevenRows="true"
ItemTemplate="{StaticResource chatDataTemplateSelector}"
ItemsSource="{Binding Messages}"
SelectionMode="None" />
当我换成CollectionView:
<CollectionView
x:Name="MessagesList"
BackgroundColor="Transparent"
ItemTemplate="{StaticResource chatDataTemplateSelector}"
ItemsSource="{Binding Messages}"
ItemsUpdatingScrollMode="KeepLastItemInView"
SelectionMode="None" />
【问题讨论】:
-
您是在问如何将新数据实际添加到您的列表视图中?你的
ItemsSource是ObservableCollection吗? -
我的 ItemSource 是一个 ObservableCollection。我问如何在收到新消息时将列表视图滚动到底部。
-
您的代码有什么问题?它做什么(或不做什么)?
-
OnAppearing 仅在您导航到页面时发生。如果您仅在同一页面上添加到您的收藏,那么这就是它不起作用的原因 - 您需要将该 ScrollTo 代码放在您添加到收藏的同一位置。
-
我现在正在测试,但从未调用 RefreshScrollDown。
标签: c# listview xamarin.forms