Как передать коллекции из ViewModel одного представления в другое представление? - PullRequest
0 голосов
/ 26 сентября 2011

Может кто-нибудь посоветовать решение в следующем сценарии:

У меня есть приложение MVVM, в котором мне нужно показать модальное окно из главного окна, чтобы добавить какое-то значение в коллекцию в классе viewModel. Что будет лучшим подходом для этого. Я имею в виду. Мне нужно изменить некоторые коллекции в viewModel, My MainWindow имеет ссылку на viewMode.

 viewModel = new ExamViewModel();
 this.DataContext = viewModel;

Достаточно ли хорошо, чтобы открыть viewmodel также для дочернего окна? Или есть «правильный» способ сделать это.

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Обычно, модальное окно будет знать только об этом объекте, позволяя пользователю заполнить новый объект (и, возможно, также отредактировать существующий объект). Затем он передаст заполненный объект обратно родителю, который отвечает за обновление коллекции.

0 голосов
/ 26 сентября 2011

Как предложил @Marcelo, ваш код, открывающий новое дочернее окно, должен быть передан с некоторым делегатом из вашей ViewModel. Этот делегат создаст дочернюю ViewModel (скажем, ChildVM) и заполнит одно из его свойств (скажем, ChildCollection) своей собственной коллекцией (ParentVM.ParentCollection).

  var childVM = new ChildVM();
  childVM.ChildCollection = parentVM.ParentCollection.ToList();
  return childVM;

Тогда ваше дочернее окно будет привязано к этому вновь заполненному свойству коллекции (ChildVM.ChildCollection), и после того, как оно выполнит действия подтверждения типа "ОК" / "СОХРАНИТЬ", закрытое дочернее окно должно уведомить / делегировать обратно родительской модели представления. «включить» изменения обратно в свою старую коллекцию ... вот так ...

   parentVM.ParentCollection.Clear(); 
   parentVM.ParentCollection.AddRange(ChildVM.ChildCollection);

Так

  1. Изменения вносятся в отдельные списки. Целостность данных сохраняется.
  2. ТОЛЬКО законное действие (ОК / СОХРАНИТЬ) объединяет изменения.
  3. Дочерняя модель представления легко отключается от интерфейса пользователя и удаляется из памяти из-за отключенных данных и незагруженного дочернего представления.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...