У меня есть элемент управления silverlight (View), который отображает список элементов в указанном свойстве datacontext (viewmodel).
Мне нужно, чтобы средство просмотра прокрутки в моем элементе управления прокручивало вверх или вниз в зависимости от того, где последний элемент был добавлен в список. (Это всегда будет либо начало, либо конец списка, мне не нужно беспокоиться о вставках в середину списка.)
В WPF я бы просто использовал событие DataContextChanged, чтобы начать прослушивание модели представления, но в Silverlight это событие является внутренним.
Есть идеи, как с этим справиться?





Вместо DataContextChanged в WPF можно использовать событие CollectionChanged объекта ObservableCollection. В измененной коллекции вы узнаете индекс NewItem.
Я не могу использовать CollectionChangedEvent из ObservableCollection, так как мне нужно событие DataContextChanged, чтобы получить DataContext, который в первую очередь содержит коллекцию.
Хорошая отправная точка - Прикрепленные поведения в CodeProject.
Полезным поведением было бы наблюдение за ListBox.ItemsSource и присоединение к наблюдаемой коллекции при установке. В событии изменения коллекции используйте ListBox.ScrollIntoView для отображения измененного элемента.
Не могли бы вы сделать это во ViewModel?
Независимо от того, какая модель ViewModel имеет ObservableCollection, предоставьте свойство типа T с именем SelectedItem, и всякий раз, когда ObservableCollection изменяется на новый элемент, событие CollectionChanged позволит вам установить свойство SelectedItem. Как только это будет сделано, подключите SelectedItem в элементе управления к этому свойству в ViewModel.
Очевидно, это будет работать только с такими элементами управления, как ListBox, где существует свойство SelectedItem.
Бесполезно для вопросов Silverlight.