2008-11-27 74 views
2

我有一個Silverlight控件(視圖),它顯示了datacontext(viewmodel)的指定屬性中的項目列表。我如何BringToView添加到綁定的最新項目ObservableCollection

我需要的是我的控件中的scrollviewer滾動到頂部或底部,取決於最新的項目已添加到列表中的位置。 (它將永遠是列表的開始或結束,我不需要擔心列表插入的中間部分。)

在WPF中,我只是使用DataContextChanged事件來開始監聽viewmodel ,但在Silverlight中,事件是內部的。

有關如何解決此問題的任何想法?

回答

1

一個好的起點是Attached Behaviors on CodeProject

有用的行爲會在設置時觀察ListBox.ItemsSource並附加到可觀察集合。在收集已更改的事件上,使用ListBox.ScrollIntoView來顯示已更改的項目。

-1

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

+0

對Silverlight問題沒有用。 – 2009-07-13 08:04:57

0

我無法使用ObservableCollection的CollectionChangedEvent,因爲我需要DataContextChanged事件來獲取DataContext,該DataContext在第一個位置持有Collection。

0

你不會在ViewModel中做到這一點嗎?

無論ViewModel是否具有ObservableCollection,都暴露了一個名爲SelectedItem的T類型屬性,並且每當ObservableCollection更改爲新項目時​​,CollectionChanged事件將允許您設置SelectedItem屬性。完成此操作後,將控件中的SelectedItem連接到ViewModel上的此屬性。

這顯然只適用於像ListBox這樣的SelectedItem屬性存在的控件。

相關問題