以下问题让我现在忙了很长一段时间,它似乎是如此基本,但它只是不起作用。归结为:
必须有一种方法来保持其他元素,并且只需要移动"移动的项目。我甚至不关心移动项目的奇特翻译动画,我只是希望其他元素留在屏幕上。 当然,我的真实用例不是随机移动项目,而是在后面的代码中对列表进行排序。但我将问题追溯到这个简单的案例。
有一个简单的ListView并让它绑定例如到CodeBehind中的ObservableCollection,下面是我的虚拟代码来移动项目:
_timer = new Timer(async _ =>
{
Random r = new Random();
var randomIndex = r.Next(0, contactsCvsSource.Count - 1);
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { contactsCvsSource.Move(randomIndex, 5); });
}
, null, 0, 1000);
答案 0 :(得分:0)
在每一个动作中,所有项目都会刷新(至少它看起来像那样。一瞬间所有项目都会消失,然后重新出现在新订单中
Move
ObservableCollection
方法用于提高UI刷新性能。当Move
方法调用时,UI元素哈希值不会改变,它只刷新ListView
并且没有重新创建。
我只想让其他元素留在屏幕上。当然,我的真实用例不是随机移动项目,而是在后面的代码中对列表进行排序。
根据您的要求,您可以通过Insert
和Remove
方法实现此功能。
var _timer = new Timer(async _ =>
{
Random r = new Random();
var randomIndex = r.Next(0, Items.Count - 1);
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
Items.Insert(5,Items[randomIndex] );
Items.RemoveAt(randomIndex);
});
}
, null, 0, 1000);