Задать вопрос
@f_kirill

Как создать новоге окна используя паттерн MVVM, используя существующий ViewModel?

Есть форма PersonsList, где каждый элемент списка - это объект класса PersonViewModel. Собственно вопрос, как вызвать создание новой формы и в качестве DataContext передать ей уже существующий объект класса PersonViewModel в рамках паттерна MVVM?
  • Вопрос задан
  • 268 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C#
> PersonsList
советую форму назвать PersonsListWindow.

Потом вам надо создать еще одну вьюмодельку - PersonsListViewModel, которая будет вьюмоделью для ВСЕЙ ФОРМЫ в целом, и у которой будет свойство Persons/PersonViewModels типа IObservableCollection. В этой коллекции у вас будут все вьюмодельки для каждого человека. Тогда вы вашей форме PersonsListWindow должны будете назначить PersonsListViewModel в качестве DataContext, а уже ваш контрол списка (ListView например, или DataGrid, смотря что там у вас) забиндить на свойство Persons/PersonViewModels. Это будет что называется, "по паттерну". Итого:
1) personsListWindow.DataContext = new PersonsListViewModel();
2) в XAMLе контрол-список (его свойство ItemsSource) биндите на свойство PersonViewModels
3) каждый элемент списка автоматически сопоставляется с вьюмоделькой из ObservableCollection.

Если потом на форму добавите еще контролы, то и во вьюмодельку для формы (PersonsListViewModel) сможете добавить еще данные для показа/модификации. Например, захотите в этом списке выбирать ответственного за работу человека - тогда можно сделать в PersonsListViewModel свойство Leader типа PersonViewModel. Или если у вас там будут кнопки Создать/Удалить - то можно выставить соответствущие ICommand-объекты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы