Мы разрабатываем приложение WPF / MVVM, которое позволяет пользователю искать и манипулировать записями контактов.
У нас есть MainViewModel, который содержит наблюдаемую коллекцию объектов ContactViewModel, каждый из которых оборачивает сущность Contact, возвращаемую нашим бизнес-уровнем. Пользовательский интерфейс отображает их в виде списка со свойством SelectedItem, связанным с соответствующим свойством SelectedContact в MainViewModel.
У нас также будет кнопка или что-то еще, где команда привязана к ICommand ProcessContact, предоставляемой MainViewModel.
ProcessContact должен взять выбранный контакт и что-то с ним сделать, не имеет значения, что.
Мой вопрос таков: каким будет правильный способ получения базового объекта Contact, обернутого выбранным ContactViewModel? Я мог бы просто предоставить свойство Contact в моей модели представления, но это означает, что представление потенциально может привязываться к свойствам непосредственно из модели.
Я обнаружил, что много раз передаю экземпляры ViewModel, что кажется неправильным, когда я действительно хочу, чтобы объект был обёрнут.
Я что-то упускаю из виду?
Редактировать: коллеги выдвинули пару предложений:
Предоставить сущность как защищенное свойство в ViewModel, что остановит привязку к нему представления (при условии, что классы представления находятся в отдельной сборке)
Прекратите пытаться получить доступ к модели вообще. Если мы хотим каким-то образом обработать базовую сущность, мы вызываем метод в ViewModel. В моем примере у нас может быть метод .Process от ContactViewModel. (‘SelectedContact.Process ()’)
Второй вариант кажется мне лучшим решением, но я не уверен, стоит ли нам добавлять столько логики во ViewModel (но если нет, то где?)