MVVM. Оправдано ли добавление кода в View в некоторых случаях? - PullRequest
7 голосов
/ 25 октября 2010

У меня есть вид, у которого есть список элементов, привязанных к моей модели представления (шаблон 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?

1 Ответ

9 голосов
/ 25 октября 2010

Да, это вполне приемлемо. Так как логика здесь связана со 100% View, нет проблем с добавлением его в View.

MVVM - это отделение логики приложения от логики View, а не удаление 100% кода из вашего View.

При этом существуют альтернативы коду для этого. Присоединенные свойства (или Поведения) являются отличным вариантом для подобных задач - они имеют большое преимущество, так как их можно повторно использовать в других представлениях позже, поэтому вы не будете изобретать это позже, если решите, что хотите такое же поведение в других частях вашего пользователя. Интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...