移动行时 ListView contentY 发生变化
Posted
技术标签:
【中文标题】移动行时 ListView contentY 发生变化【英文标题】:ListView contentY changes when rows are moved 【发布时间】:2015-09-23 14:18:02 【问题描述】:我有一个 ListView 分为两个部分:收藏夹和常规项目,其中一个模型继承了 QAbstractItemModel
。模型中的项目被排序,以便收藏在常规项目之前,当一个项目被标记为收藏时,它被移动到基础列表中的适当位置。
这是模型中执行移动的代码:
if (beginMoveRows(QModelIndex(), position, position, QModelIndex(), newPosition))
items.removeAt(position);
items.insert(newPosition + (newPosition < position ? 0 : -1), item);
endMoveRows();
但是,每次移动发生时,ListView 的contentY
都会更改为-delegate.height
(在本例中为-120px)。唯一可见的变化是滚动条偏移并最终退出屏幕。
发生了什么,我该如何解决?
编辑:我发现只有当 ListView 完全滚动到底部时才会发生这种情况。
【问题讨论】:
【参考方案1】:这是问题的间接解决方案。由于唯一重要的症状是滚动条发生偏移,因此我必须找到另一个值来设置滚动条的y
属性:ListView.visibleArea.yPosition
。
这是整个绑定:
Binding
target: handle
property: "y"
value: (flickable.height - handle.height - 25) * flickable.visibleArea.yPosition / (1 - flickable.visibleArea.heightRatio)
解释:
flickable.height - handle.height
- 这是滚动条手柄顶部移动的高度部分
25
- 我自己的具体偏移量,与他人无关
flickable.visibleArea.yPosition / (1 - flickable.visibleArea.heightRatio)
- 这个整数是从 0% 到 100% 的百分比,从滚动条的最高位置到最低位置(最高 y
)
更多关于ListView.visibleArea.yPosition
。
【讨论】:
以上是关于移动行时 ListView contentY 发生变化的主要内容,如果未能解决你的问题,请参考以下文章
Android 上的 Xamarin.Forms ListView OutOfMemoryError 异常
在C#中的Listview控件中,当鼠标悬浮在某列或者当选中某行时怎么显示图片??