Как предложил @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);
Так
- Изменения вносятся в отдельные списки. Целостность данных сохраняется.
- ТОЛЬКО законное действие (ОК / СОХРАНИТЬ) объединяет изменения.
- Дочерняя модель представления легко отключается от интерфейса пользователя и удаляется из памяти из-за отключенных данных и незагруженного дочернего представления.