ListView
を使用して、アプリケーションで発生したエラーのリストを表示します。 Visual Studioのエラーリストと同じように動作し、表示されます。最後のエラー項目が選択されたときに自動スクロールを追加します(最後にキャレットを配置するときにVisual Studioのログウィンドウが自動的にスクロールする方法など)。私は_Items_CollectionChanged
イベントハンドラで自動スクロールを実行しようとしたが、これは上のイベントですのでリストビューを最後に追加したアイテムに自動的にスクロールする最適な方法は何ですか?
public ObservableCollection<ErrorListItem> Items;
...
MyListView.ItemsSource = _Items;
:
エラーのリストは、このようなListView.ItemsSource
に渡されObservableCollection
、です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
に追加されると、イベントを聴く方法はありますか?それは私のオートスクロールを適切に行うためにキャプチャする理想的なイベントです。それとも、私が使うことのできる別のテクニックがありますか?