Я согласен с обоими другими ответами (ответы Киерена и Гроки), но чувствую, что в этом решении они не упомянули очень важный фактор.
Создавать модель представления следует только в том случае, если в том, что вы делаете, есть что-то конкретное для представления. Если все, что вы делаете, - это привязка к данным и вызов команд, которые, естественно, принадлежат вашей модели, нет причин создавать модель представления.
Например, предположим:
- Ваш объект Player имеет свойство Name, свойство Rank, метод Promote () и метод Delete ().
- Ваш вид является простым, который позволяет редактировать имя и ранг любого игрока, а также имеет кнопки для продвижения и удаления игроков.
В этом случае добавление модели вида между вашим видом и вашей моделью не имеет смысла. Такой вид можно привязать непосредственно к модели:
- Привязать TextBox.Text к свойству Name
- Привязать Slider.Value к свойству Rank
- Привязать кнопку продвижения к методу продвижения ()
- Свяжите кнопку «Удалить» с методом Delete ()
Обратите внимание, что вместо привязки кнопки Delete к методу Delete () вы можете установить для ее Command значение ApplicationCommands.Delete и использовать CommandBinding для вызова метода Delete ().
Я хочу сказать, что в большинстве случаев, если ваши модели хорошо спроектированы, вам не нужно будет вставлять объект модели вида. Модель представления действительно необходима только тогда, когда необходимо отслеживать специфичное для вида состояние (например, «текущий игрок»), преобразования слишком сложны, чтобы их можно было обработать простым связыванием, или вам нужны команды, которые влияют на несколько различных объектов модели и / или представления. Свойства модели одновременно.
По моему опыту, если модель спроектирована правильно, только около 50% всех видов действительно нуждаются в модели вида, а в случае элементов в списке это больше похоже на 20%.
Примером времени, когда вы можете использовать модель представления для элемента в списке, является случай, когда вам нужно сохранить отдельный «выбранный» флаг, который является частью вашего представления, но не вашей модели, а основные функциональные возможности в ListBox недостаточно.