如何BringToView添加到绑定ObservableCollection的最新项目

时间:2008-11-27 15:29:34

标签: silverlight

我有一个silverlight控件(View),它显示datacontext(viewmodel)指定属性中的项目列表。

我需要的是我的控件中的scrollviewer滚动到顶部或底部,具体取决于最新项目添加到列表的位置。 (它始终是列表的开头或结尾,我不需要担心列表插入的中间位置。)

在WPF中,我只是使用DataContextChanged事件开始监听viewmodel,但在silverlight中该事件是内部的。

关于如何解决这个问题的任何想法?

4 个答案:

答案 0 :(得分:1)

一个很好的起点是Attached Behaviors on CodeProject

一个有用的行为是在设置时观察ListBox.ItemsSource并附加到observable集合。在集合已更改事件上,使用ListBox.ScrollIntoView显示已更改的项目。

答案 1 :(得分:0)

我不能使用ObservableCollection的CollectionChangedEvent,因为我需要DataContextChanged事件来获取首先保存Collection的DataContext。

答案 2 :(得分:0)

你不会在ViewModel中这样做吗?

无论ViewModel是否具有ObservableCollection,都要公开名为SelectedItem的T类型的属性,每当ObservableCollection使用新项更改时,CollectionChanged事件将允许您设置SelectedItem属性。完成此操作后,将控件中的SelectedItem连接到ViewModel上的此属性。

这显然只适用于ListBox等存在SelectedItem属性的控件。

答案 3 :(得分:-1)

在WPF中代替DataContextChanged,可以使用ObservableCollection的CollectionChanged事件。在更改的集合中,您将了解NewItem索引。