Спасибо за ответ. Теперь я перечитал свое сообщение и вижу, что оно довольно расплывчато. У меня есть экран, который редактирует объект, который содержит несколько списков других дочерних объектов. Я реализовал их как разные вкладки в элементе управления вкладками. Одна из этих вкладок редактирует комментарии, поэтому я хотел отобразить список комментариев с панелью редактирования для текущего выбора рядом со списком. Затем пользователь может использовать кнопки добавления, редактирования или удаления для обновления списка. Я хотел сделать это в чистом виде (изго) MVVM.
Я придумал следующий дизайн, который, кажется, работает с минимальными взломами.
Представление включает в себя список дочерних объектов просто в виде ListView, привязанного к наблюдаемой коллекции в ViewModel. Я включил буфер дочерних объектов - он используется для буферизации изменений до тех пор, пока они не будут готовы быть сохранены обратно в список (или выброшены).
Вид также включает панель редактирования, привязанную к объекту буфера в ViewModel. Буфер обновляется всякий раз, когда текущий выбор списка изменяется с использованием глубокой копии. Я попытался использовать привязку данных к свойству Selecteditem, но набор так и не был вызван, поэтому был добавлен небольшой метод с выделением кода для принудительного обновления свойства при изменении выбора.
Вид списка и вид редактирования являются взаимоисключающими. Теоретически вы можете скрыть отключенный, возможно, с помощью перевернутого экрана. Как правило, для моего приложения лучше, чтобы оба приложения отображались одновременно, поскольку на панели редактирования может отображаться дополнительная информация, не отображаемая в виде списка. Выбор того, какая панель включена, определяется привязкой IsEnabled к свойству ViewModel, например IsEditCommentMode.
Необходимо добавить команды для управления списком, это New, Edit и Delete. Обратите внимание, что Add и Edit установят буфер, а затем установят IsEditCommentMode в true. Эти команды управления списком доступны, только если IsEditCommentMode имеет значение false.
Панель редактирования реализует команды «Сохранить» и «Отмена», они включаются только в том случае, если IsEditCommentMode имеет значение true. Когда Save выполняется, он должен скопировать из буфера в список (добавить или обновить) и запустить уведомление об изменении. Наконец, он должен установить для IsEditCommentMode значение false.
Это все работает хорошо и, похоже, не нарушает никаких требований MVVM (по моему скромному, но часто ошибочному мнению).