Если вы достаточно смелы, чтобы принять большой архитектурный сдвиг, вы можете рассмотреть вопрос CompositeWPF (ранее называемый Prism) от ребят из Patterns & Practices из Microsoft.
Вас интересует возможность определения «областей» в оболочке (то есть окна), а затем использование представлений для заполнения областей. Он использует шаблон Model-View-Presenter, чтобы позволить независимую разработку «представлений» из модели, которые могут быть легко перемещены с течением времени, поскольку оболочка определяет только области и не связана напрямую с тем, что в ней размещено. В принципе, это помогает отделить оболочку от представлений и представлений друг от друга и облегчить модульное тестирование ... бла, бла-бла.
Это большой скачок, который замедлит вас с самого начала, хотя ваша ситуация относится к одному из типов приложений, для которых предназначен CompositeWPF.
В рамках CompositeWPF вам нужно будет использовать различные шаблоны, которые могут запутать новичков, например, UnityContainer, инверсия управления, MVP (или модель / представление / представление-модель) и внедрение зависимостей.
Я помню, когда я только начинал с примеров приложений, которые были озадачены, потому что не очевидно, как на самом деле некоторые виды даже создавались! Контейнер Unity будет создавать объекты и магически вызывать параметризованные конструкторы.
CompositeWPF - это элегантное решение вашего вопроса, но не простое и не простое. Используя CompositeWPF в моем последнем проекте, я намереваюсь использовать его снова для следующего соответствующего приложения.