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;
}
})
}
しかし、それは明らかにそれを行う正しい方法ではありません。また、リストがフィルタリングされている場合でも機能し続けたいと思います(ソースの最後の項目ではなく、の最後の項目をチェックしますListViewItem
)ListView
。
バインドされたコレクションへListViewItem
の次の追加にが追加されたときにイベントをリッスンする方法はありますか?ListView
これは、自動スクロールを適切に実行するためにキャプチャするのに理想的なイベントです。または、私が使用できる別のテクニックはありますか?