2013-12-24 3 views
1

Вопрос. Я хочу вызвать ViewModel-Command из моего представления. У меня проблема: параметр Command не может быть привязан. Скажем. Пользователь нажимает элемент. И я хочу передать моей команде ViewModel объект, который содержит свойства: CurrentEntity, PositionX, PositionY. (Это графическое приложение, поэтому я передаю позиции X, Y в мою модель просмотра. Мне нужно сохранить значения в БД.) Теперь как бы вы решили эту проблему? Как вы связываете команду из представления и передаете этот конкретный объект параметров команды?Правильное использование команд (MVVM)

То, что я сделал сейчас: у меня есть специальный интерфейс, который определяет командование, которое реализовано виртуальной машиной. THEN ... на мой взгляд (код-сзади) я отбрасываю DataContext в этот командный интерфейс, а затем вызываю команду из кода позади (обработчик событий). Но на самом деле это не имеет смысла ... Потому что в этом случае я мог бы просто вызвать простую функцию ViewModel. (Если мне не нужна функция CanExecute) Это хороший дизайн? Мне не нравится ... что некоторые привязки команд находятся в XAML, а некоторые - в коде. Это немного запутанно с архитектурной точки зрения.

Я достаточно ясно?

Благодаря

ответ

2

Самое главное, что ViewModel не содержит код, который специфичен для просмотра. Просмотр позволяет делать все, что ему нужно, чтобы работать с базовым ViewModel.

Использование команд для привязки вашего представления к вашему ViewModel удобно, поскольку оно обеспечивает простой, легко читаемый и проверяемый код XAML; но если у вас сложный сценарий использования, который требует некоторого кода для «преобразования» данных View во что-то, что может использовать ViewModel (в данном случае: координаты и CurrentEntity), тогда вполне приемлемо использовать обработчик событий, и вручную выполнить привязку команды (или даже публичный метод на виртуальной машине, если хотите).

Идея состоит в том, чтобы убедиться в том, что ваш код можно тестировать по отдельности: и из вашего описания я утверждаю, что вы полностью в безопасности.

Если вы хотите, чтобы ваш код полностью вписывался в форму «MVVM», используя только команды, вы можете использовать пользовательские поведенья или EventTriggers, чтобы «переманить» разрыв между вашим представлением и привязкой команды ViewModel.

+0

Спасибо! Ответ, который я хотел услышать :) – user3132998

Смежные вопросы