我正在使用Windows 10通用應用程序,並在我的應用程序中使用ListView時看到一些閃爍的問題。我的ListView使用x:Bind綁定到View Model中的ObservableCollection。更新綁定集合時ListView閃爍
當用戶執行某些操作或發生後臺更新時,我會進行一些處理,需要刷新ObservableCollection。
private ObservableCollection<Item> UIItems = new ObservableCollection<Item>();
private bool IsUpdating = false;
private void UpdateUIProperties(List<Item> newItems)
{
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
IsUpdating = true;
UIItems.Clear();
foreach (var item in newItems)
{
if (item.IsVisible)
{
UIItems.Add(item);
}
}
IsUpdating = false;
});
}
執行此代碼後,ListView閃爍,然後滾動查看器一路走到頂部。有什麼辦法來防止這種情況,並讓ListView的ScrollViewer停留在原來的偏移量?
這樣做的問題是它會導致ListView在UIItems集合更新後滾動到頂部。通過上述解決方案,滾動偏移量將保持不變。 –
將ItemsUpdatingScrollMode設置爲KeepScrollOffset:請參見:http://stackoverflow.com/questions/27924000/prevent-the-listview-from-scrolling-to-its-top-position-when-itemsource-changed/27933274#27933274 –
但說實話:無論如何,當刪除集合中的所有項目時,視圖是否應該保留?如果您只是更換*一些*項目,爲什麼不更新這些而不是重新填充集合? –