如何为底部的每个新条目更新列表视图?
How to update Listview for each new entry at the bottom?
我正在制作一个带有聊天功能的应用程序,我想要实现的是对于每条新消息,底部的 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" />
如果您在 ItemSource
收到新消息时添加新消息,那么您可以考虑使用 CollectionView
,因为它有一个现成的 属性 (ItemsUpdatingScrollMode="KeepLastItemInView"
) 调整滚动偏移以在添加新项目时保持显示列表中的最后一个项目。
你可以看看Control scroll position when new items are added。
更新:
在列表视图中,您的 DataTemplate 可能类似于:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
...
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
当你使用 collectionview 时,它会像:
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid>
...
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
可以参考的越多collectionview。
我正在制作一个带有聊天功能的应用程序,我想要实现的是对于每条新消息,底部的 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" />
如果您在 ItemSource
收到新消息时添加新消息,那么您可以考虑使用 CollectionView
,因为它有一个现成的 属性 (ItemsUpdatingScrollMode="KeepLastItemInView"
) 调整滚动偏移以在添加新项目时保持显示列表中的最后一个项目。
你可以看看Control scroll position when new items are added。
更新:
在列表视图中,您的 DataTemplate 可能类似于:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
...
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
当你使用 collectionview 时,它会像:
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid>
...
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
可以参考的越多collectionview。