Я использую созданные мной библиотеки, которые позволяют одному DataContext сохранять изменения обратно в родительский DataContext, а родительский DataContext уведомлять своих потомков о том, что он только что получил изменения.
С помощью этой функциональности я создаю один главный DataContext для всего моего приложения, затем для любых модальных окон с кнопками Ok и Cancel или других частей пользовательского интерфейса, которые временно нуждаются в собственном «представлении о реальности», я создаю дочерние DataContexts. Когда дочерний DataContext записывает обратно в родительский объект, это приводит к обновлению всех элементов управления, связанных с объектами в родительском объекте, и для родительского элемента передает изменения всем дочерним элементам, чтобы они тоже могли обновляться (или нет, если они находятся в режиме моментального снимка).
Это решение заняло некоторое время для кодирования, но прекрасно работает. Я также использую точно такой же механизм для отправки изменений в родительский DataContext на сервере, который используется другими клиентами, поэтому у всех есть новейшие данные, что дает мне отличную производительность кэширования. Я даже использую его для связи с моим внутренним хранилищем данных.