WPF ListView控件滚动到PropertyChanged的底部
本文关键字:PropertyChanged 底部 滚动 ListView 控件 WPF | 更新日期: 2023-09-27 18:27:50
我有一个名为Logger的类,它有一个ObservableCollection,它保存绑定到MainWindow类上ListView控件的所有项数据。
在Logger类中,我引发PropertyChangedEventHandler事件,告诉UI集合已经更新。在这一点上,我还想更新UI,将ListView滚动到底部。
我将在哪里或如何处理这件事?我正在寻找XAML控件的一个属性,比如"OnPropertyChanged",在它里面我可以做一些事情滚动到底部。
我知道,在一个有MainWindow实例的类中,我可以简单地在LV框上使用ScrollIntoView方法,但由于Logger类中没有Window实例,我如何实现这一点?
很抱歉,如果这很简单,我还处于WPF的早期阶段!
干杯,Dave
-
假设你的程序总是使用相同的ObservableCollection对象,我认为你不需要引发PropertyChangedEventHandler,因为你的集合是可观察的,这意味着无论何时你从集合中添加/删除项,UI端都会相应地更新。只有当您要为Property分配一个新的ObservableCollection对象时,才需要PropertyChangedEventHandler。
-
要滚动到最后一项,我会监听ObservableCollection的CollectionChanged事件,然后如果NotifyCollectionChangedAction是NotifyCllectionChangedAction.Add,则使用ObservableCollection中的最后一项调用listview的scrollintoview方法。注意:a.您可能需要在scrollintoview之前调用UpdateLayout。b.CollectionChanged事件后需要执行UpdateLayout/ScrollIntoView。可以在事件之后使用UI的Dispatcher.BeginInvoke来调用方法。
一种方法可以是首先为列表设置IsSynchronizedWithCurrentItem="True",然后使用CollectionViewSource.GetDefaultView(_yourCollection).MoveCurrentTo(selectedItem)设置观察集合的选定项;在您的ViewModel中,最后在您的View中处理您的列表框的SelectionChanged事件,并调用您列表框的ScrollIntoView。另一种更直接的方法是使用"行为"。这两种解决方案都在这里进行了解释。
如何控制MVVM WPF应用程序中ListBox的滚动位置