Зачем нужны команды?
Потому что команды обеспечивают инкапсуляцию. Вы можете скрыть любую сложную логику внутри ICommand
, и вы можете поменять ее, когда захотите. Чтобы ваш просмотр не нуждался в знаниях о ваших методах ViewModel и т. Д. Просто нужно знать, что ViewModel предоставляет команду для выполнения операции «x».
Более того ICommand
интерфейс поддерживается многими каркасных элементов, как Button
, MenuItem
и т.д. Когда у вас есть ICommand
вы можете связать его с видом --Оно будет заботиться о выполнении команды.
Почему бы не просто использовать функцию (в представлении), которая вызывает функцию ViewModel ?
Потому что мы не хотим смешивать обязанности. В представлении не должно быть логики, это просто тупое дело, которое просто отображает данные пользователю. Больше не надо.
Предположим, если у вас есть логика в вашем представлении. Однажды ваш менеджер может подойти и сказать, что нам больше не нужен этот пользовательский интерфейс (он выглядит не очень хорошо). Сделайте это чем-то привлекательным. Необходимо пересмотреть не только представление, но и повторить логику в режиме просмотра. Это повторная работа (против принципа DRY), может вводить новые ошибки, потому что ваш пользовательский интерфейс изменился и т. Д.
Еще одно главное преимущество разделения View и Logic заключается в том, что вы можете легко отладить логику (в ViewModel и Model).
Вы используете команды для выполнения делегатов с вашего * вида * на вашу * модель просмотра *, а не с вашей * viewmodel * на вашу * модель *. Ваша модель должна в основном быть вашим POCO, в то время как ваш 'ViewModel' содержит большую часть логики, вызванной вашими представлениями. –
@YuvalItzchakov Не совсем. Логика также может войти в модель. –
@SriramSakthivel Мне нравится, когда вы говорите не на основе мнения вещей :) Это вопрос вкуса, ваша модель может иметь логику, я не сказал, что это невозможно. Я сказал * most *, потому что это то, как я это рассматриваю. –