У меня есть вид, у которого есть список элементов, привязанных к моей модели представления (шаблон MVVM).
Допустим, это выглядит так:
<ScrollViewer Width="Auto" Height="Auto">
<ItemsControl ItemsSource="{Binding Path=MessageLog}"
Grid.IsSharedSizeScope="True"
ScrollViewer.CanContentScroll="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" SharedSizeGroup="FullName"/>
<ColumnDefinition Width="*" SharedSizeGroup="MessageLog"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Text="{Binding Path=PostedBy.FullName}" />
<TextBlock Text="{Binding Path=DatePosted}" />
</StackPanel>
<TextBlock Grid.Column="1" Text="{Binding Path=MessageLog}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
Когда пользователь добавляет что-то в MessageLog (в VM есть свойство MessageLog), я хочу автоматически прокрутить до самого последнего элемента.
Другими словами, я просто хочу автоматически перемещать полосу прокрутки, когда пользователь вводит сообщение и нажимает клавишу ввода (что-то вроде Skype).
Привязка к MessageLog работает должным образом, и элемент обновляется в представлении.(Я рад этому и хочу оставить это так)
Мне интересно, если использовать шаблонный подход MVVM, могу ли я все же реализовать автоматическую прокрутку в коде позади файла View?Это кажется вполне логичным, поскольку поведение прокрутки не имеет ничего общего с виртуальной машиной, а ViewModel ничего не знает о представлении.Это правильно?Я иду по правильному пути или я что-то упускаю?
Вообще говоря, когда имеет смысл добавить реализацию в View?