Как передать информацию EventArgument из представления для просмотра модели в WPF? - PullRequest
0 голосов
/ 21 марта 2010

В моем приложении есть элемент управления ListView, который связан с коллекцией CustomObject List <<strong> CustomObject >. CustomObject имеет отдельный вид. Этот ListView имеет отдельную модель представления.

Коллекция List _customobject содержится в классе ListView ViewModel.

Мой запрос:

Я хочу вызвать представление, отображающее свойства пользовательского объекта, когда пользователь дважды щелкает мышью на любой строке ListView. Команда двойного щелчка ListView привязана к команде ListViewDoublClick в модели представления. CustomObject находится в аргументе события команды двойного щелчка по списку. Чтобы добиться этого, я должен передать пользовательский объект (или уникальное свойство id пользовательского объекта, через которое я могу извлечь пользовательский объект из коллекции) в качестве параметра команды.

Пожалуйста, предложите мне решение !!

1 Ответ

2 голосов
/ 21 марта 2010

Самый простой способ сделать это - добавить обработчик событий двойного щелчка в список. Помните: MVVM не означает отсутствие кода в представлении! Это означает, что представление только обрабатывает проблемы представления. Вы можете привести действительно хороший аргумент, что EventArgs имеют значение только для представления, и если вы хотите передать его в ViewModel, вам следует только передать соответствующую информацию. Если вам нужно что-то вроде извлечения данных из EventArgs для передачи их в ViewModel, это приемлемо и правильно ... и лучше, чем передавать EventArgs вниз во ViewModel, IMHO.

(я уверен, что у меня возникнут некоторые разногласия по этому вопросу, но работа с взаимодействием с пользовательским интерфейсом является проблемой View, и если альтернативой является написание поведения или использование инфраструктуры для получения единого элемента управления, работающего на одной странице, помните: ягни и паттерны не религия.)

Несколько платформ MVVM позволяют вам сделать это (хотя есть много дискуссий о том, хорошая это идея или нет). В частности, MVVM Light Toolkit недавно добавил это для поддержки перетаскивания (если я правильно помню сообщение в блоге).

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

...