c# - 如何在 C#/Xamarin 中使用“.ScrollTo”列表视图方法
问题描述
我试图弄清楚如何使用可用于列表视图的 ScrollTo 方法。我相信我的最后两个论点是正确的,但我不太确定我的第一个论点是否正确。
这是带有我的列表视图的 xaml 以供我查看...
<ListView
x:Name="MyList"
Grid.Row="0"
Grid.RowSpan="4"
Grid.Column="0"
Grid.ColumnSpan="8"
ItemsSource="{Binding History}"
ItemTapped="OnItemTapped"
RowHeight="60">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Margin="8">
<Label
Text="{Binding MessageTitle}"
FontAttributes="Bold" />
<Label
Text="{Binding MessageContents}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是我尝试使用 .ScrollTo 的视图背后的部分代码
private void ScrollToBottomClicked(object sender, EventArgs e)
{
List.ScrollTo(MyList.ItemsSource, ScrollToPosition.End, true);
}
这是 ItemSource,它是我的视图模型中的一个可观察集合
public ObservableCollection<HistoryMessage> History
{
get
{
return History;
}
set
{
History = value;
}
}
单击 ScrollToBottom 按钮时,我希望列表视图显示跳转最近添加的项目。任何帮助将不胜感激!
解决方案
例如:
在我后面的代码中,我有以下方法,在我的情况下是无效的,因为我只在加载所有列表时调用
public void ScrollDown(HistoryMessage historyMessage)
{
List.ScrollTo(historyMessage, ScrollToPosition.End, false);
}
所以,当我得到所有列表时,我调用这个方法
ScrollDown(History.LastOrDefault());
如果您有一个按钮并且希望我向您显示列表中最接近的项目,您应该查询您的 API 以查看是否添加了任何元素,然后调用此方法并发送 lastOrDefault 元素。
如果您想要的是第一个元素,您需要将 List.ScrollTo(historyMessage, ScrollToPosition.End, false) 更改为 List.ScrollTo(historyMessage, ScrollToPosition.Start, false) 并在您的可观察集合中发送第一个元素
推荐阅读
- git - Git 默认主目录包含一个错字,我该如何更改它?
- leaflet - 平移时未完全绘制传单折线
- java - iText 2.1.7 中的数字签名
- magento2 - 如何从magento 2中的子产品(简单)中获取选项
- javascript - Mongoose .Populate() 返回空数组
- javascript - Vue.js 不会在输入更新的控制台数据中显示 - 任何错误
- angular - Angular 7:ngModel 数据绑定不会在单元测试中更新组件属性
- mysql - 哪些自行车在 12 月 8 日上线?
- angular - 从父组件访问子路由参数
- reactjs - React SPA动态环境配置