ということをしたいというケースがありました。
やり方としては、ItemsSourceがINotifyCollectionChangedだったら追加されたCollectionChangedを購読して追加された要素に対してScrollIntoViewしてやるだけです。 とりあえず、こういうBehaviorを作ってListViewにぽとっと落として実現しました。
publicclass ScrollBottomBehavior : DependencyObject, IBehavior { public DependencyObject AssociatedObject { get; set; } private INotifyCollectionChanged currentItemsSource; publicvoid Attach(DependencyObject associatedObject) { this.AssociatedObject = associatedObject; var lv = this.AssociatedObject as ListView; lv.DataContextChanged += (_, __) => { if (this.currentItemsSource != null) { this.currentItemsSource.CollectionChanged -= this.CurrentItemsSource_CollectionChanged; } this.currentItemsSource = lv.ItemsSource as INotifyCollectionChanged; if (this.currentItemsSource != null) { this.currentItemsSource.CollectionChanged += this.CurrentItemsSource_CollectionChanged; } }; } privatevoid CurrentItemsSource_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action != NotifyCollectionChangedAction.Add) { return; } var item = e.NewItems.Cast<ChatMessageViewModel>().First(); ((ListView)this.AssociatedObject).ScrollIntoView(item); } publicvoid Detach() { if (this.currentItemsSource != null) { this.currentItemsSource.CollectionChanged -= this.CurrentItemsSource_CollectionChanged; this.currentItemsSource = null; } } }