Мы разрабатываем приложение WPF/MVVM, которое позволяет пользователю осуществлять поиск и манипулировать контактными записями.Как получить доступ к базовому объекту/модели ViewModel
У нас есть MainViewModel, который содержит наблюдаемую коллекцию объектов ContactViewModel, каждая из которых обертывает объект Contact, возвращенный с нашего бизнес-уровня. Пользовательский интерфейс отображает их в списке, а свойство SelectedItem привязано к соответствующему свойству SelectedContact в MainViewModel.
У нас также будет кнопка или что-то там, где команда привязана к ICommand «ProcessContact», открытому MainViewModel.
ProcessContact должен принять выбранный контакт и что-то сделать с ним, на самом деле это не имеет значения.
Мой вопрос: Каким будет правильный способ доступа к базовому объекту Contact, обернутому выбранным ContactViewModel? Я мог бы просто открыть свойство Contact в моей модели представления, но это значит, что представление может потенциально связываться с свойствами непосредственно с модели.
Я обнаружил, что просматриваю экземпляры ViewModel много, что кажется неправильным, когда я действительно хочу, это сущность, которую она обертывает.
Я пропустил что-то очевидное?
Edit: Несколько предложений брошенных вокруг коллег:
Expose объекта в качестве охраняемой собственности на ViewModel, что бы остановить взгляд привязку к нему (если предположить, что классы вида находится в отдельном сборка)
Прекратите пытаться получить доступ к модели в целом. Если мы хотим каким-то образом обработать базовый объект, мы вызываем метод в ViewModel. В моем примере у нас может быть метод .Process с ContactViewModel. («SelectedContact.Process()»)
Второй вариант чувствует себя как лучшее решение для меня, но не уверен, что мы должны положить, что много логики в ViewModel (но если нет, то где?)
Что делать, если я хочу связать, например, с фамилией контакта. Объект My Contact не поддерживает INotifyPropertyChanged (а также не должен быть бизнес-объектом POCO), но ContactViewModel * делает * и может перенаправлять обновления свойств контакту, одновременно поднимая NotifyPropertyChanged. См. Статью MVVM Джоша Смитса о msdn: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx. Замените его Customer/CustomerViewModel моим Contact/CntactViewModel, и у вас будет почти такая же ситуация. –