我使用ListView
來顯示錯誤列表,因爲它們出現在我的應用程序中。它的行爲和外觀與Visual Studio中的錯誤列表完全相同。我想在選擇最後一個錯誤項目時添加自動滾動功能(例如,當您將插入符號放在最後時,Visual Studio的日誌窗口如何自動滾動)。將列表視圖自動滾動到最後添加的項目的最佳方式是什麼?
錯誤列表處於ObservableCollection
,它被傳遞到ListView.ItemsSource
這樣的:
public ObservableCollection<ErrorListItem> Items;
...
MyListView.ItemsSource = _Items;
我試圖在_Items_CollectionChanged
事件處理程序進行自動滾動,而是因爲這是事件的ItemsSource
而不是在實際ListViewItems
,這是一個痛苦,找出是否最後一個項目被選中,選擇新行,等等。這是特別困難,因爲它似乎不是立即創建ListViewItems
。我設法拖延通話設置選擇這樣的最後一個項目,使其自動滾動:
void _Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// determine the last item to select from 'e'
...
_ItemPendingToBeScrolled = newItemToSelect;
ListView.SelectedItem = newItemToSelect;
Dispatcher.BeginInvoke(DispatcherPriority.Background,
(ThreadStart)delegate
{
if (_ItemPendingToBeScrolled != null)
{
ListView.ScrollIntoView(_ItemPendingToBeScrolled);
ItemPendingToBeScrolled = null;
}
})
}
但是,這顯然不是這樣做的正確方法。另外,如果列表已被過濾(不檢查源代碼中的最後一個項目,但是ListView
中的最後一個ListViewItem
),我希望事情繼續工作。
添加到綁定集合後,ListViewItem
被添加到ListView
時,是否有方法來監聽事件?這將是捕獲的理想事件,以便正確進行自動滾動。還是有另一種技術可以使用?