В сообществе Silverlight очень много усилий, чтобы сохранить код XAML за файлом как можно более свободный от кода. Какова реальная мотивация этого?Каково реальное преимущество сохранения кода из кода XAML?
Например, в чем преимущество использования команды вместо обработчика события? Если у меня есть
<Button x:Name="SaveButton" Content="Save" Click="SaveButton_Click" />
...
private void SaveButton_Click(object sender, RoutedEventArgs e) {
_myViewModel.SaveChanges();
}
Тогда почему это?
<Button x:Name="SaveButton" Content="Save" Command="{Binding SaveCommand}" />
Где очевидно SaveCommand
на мой взгляд, модель эффективно будет вызывать SaveChanges()
.
Это может привести к ситуациям, когда представление представляет собой 100% XAML, даже создавая экземпляр модели представления в XAML, а связи между моделью представления и представления полностью выполняются посредством привязки. Конечно, это чисто, но что еще? Гибкая? Зачем? представление все же должно работать с соответствующей ViewModel, поэтому, если соединение между ними существует и неявно, почему бы не сделать его более явным? У него также есть недостаток в потере поддержки времени компиляции. Если я подключу свою кнопку до обработчика события, которого не существует, компилятор скажет мне. Это не произойдет, если я привяжусь к несуществующей команде.
Я склонен согласиться с вами в этом вопросе, что если у вас нет такого приложения, где команды в целом полезны, то я действительно не вижу, что заставляет вас вводить дополнительную типизацию. Как вы говорите, это не влияет на тестируемость viewmodel так или иначе. Некоторые люди считают, что после того, как вы начнете иметь код кода, вы не сможете остановить себя, прокрадывая в него логику, которая должна быть в режиме просмотра. –
Предпочтение связано с возможностью проверки, а не разметкой xaml/codebehind. Этот вопрос был бы действительно интересным, если бы в вашем примере кода были два подхода к тестированию этих альтернатив. т.е. ваш тест для ViewModel.SaveChanges() и теста на основе ICommand. – itchi