Как мне получить доступ к базовой сущности / модели ViewModel - PullRequest
4 голосов
/ 08 сентября 2010

Мы разрабатываем приложение WPF / MVVM, которое позволяет пользователю искать и манипулировать записями контактов.

У нас есть MainViewModel, который содержит наблюдаемую коллекцию объектов ContactViewModel, каждый из которых оборачивает сущность Contact, возвращаемую нашим бизнес-уровнем. Пользовательский интерфейс отображает их в виде списка со свойством SelectedItem, связанным с соответствующим свойством SelectedContact в MainViewModel.

У нас также будет кнопка или что-то еще, где команда привязана к ICommand ProcessContact, предоставляемой MainViewModel.

ProcessContact должен взять выбранный контакт и что-то с ним сделать, не имеет значения, что.

Мой вопрос таков: каким будет правильный способ получения базового объекта Contact, обернутого выбранным ContactViewModel? Я мог бы просто предоставить свойство Contact в моей модели представления, но это означает, что представление потенциально может привязываться к свойствам непосредственно из модели.

Я обнаружил, что много раз передаю экземпляры ViewModel, что кажется неправильным, когда я действительно хочу, чтобы объект был обёрнут.

Я что-то упускаю из виду?

Редактировать: коллеги выдвинули пару предложений:

  • Предоставить сущность как защищенное свойство в ViewModel, что остановит привязку к нему представления (при условии, что классы представления находятся в отдельной сборке)

  • Прекратите пытаться получить доступ к модели вообще. Если мы хотим каким-то образом обработать базовую сущность, мы вызываем метод в ViewModel. В моем примере у нас может быть метод .Process от ContactViewModel. (‘SelectedContact.Process ()’)

Второй вариант кажется мне лучшим решением, но я не уверен, стоит ли нам добавлять столько логики во ViewModel (но если нет, то где?)

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

Ваше второе предложение кажется мне более правильным. Я обычно оборачиваю свои данные в модель представления, которая в любом случае похожа на контроллер ... Она должна контролировать, что происходит с вашими данными с помощью действий пользователя в представлении. Так что я бы пошел обернуть ваши данные, а затем прикрепить соответствующее поведение к вашей модели представления. Я не знаю, почему вы будете беспокоиться о том, чтобы добавить слишком много логики в модель представления, это ее работа!

0 голосов
/ 09 сентября 2010

Не оборачивайте вашу модель внутри вашей ViewModel.Atleast не предоставляет его в качестве публичной собственности.

Вы можете сделать своего Presenter наблюдателем модели , чтобы он получал уведомление при изменении модели.Ваш Presenter может затем вызвать View и передать его ViewModel .

0 голосов
/ 09 сентября 2010

Я бы предложил иметь наблюдаемую коллекцию объектов Contact в вашей MainViewModel.Framework автоматически поддержит уведомление об изменении свойств сущности, и вам даже не нужно реализовывать INotifyPropertyChanged в вашей сущности.

В случае, если у вас есть какая-либо конкретная причина для переноса вашей сущности Contact в viewmodel (мне интересно знатьих) вам придется выставить объект Contact (через свойство) и использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...