Я согласен с Абэ. Все, что вам нужно сделать, это добавить файл Resource Dictionary в проект (например, Resources.xaml
положить
<DataTemplate DataType="{x:Type vm:AllCustomersViewModel}">
<vw:AllCustomersView />
</DataTemplate>
внутри. И тогда в вашем App.xaml вставьте следующее:
<Application.Resources>
<ResourceDictionary Source="Resources.xaml"/>
</Application.Resources>
Таким образом, всякий раз, когда WPF пытается выяснить, как отобразить класс (который он в настоящее время не знает, как визуализировать), он смотрит в ресурсы элементов управления, если там нет шаблона, он проверяет ресурсы контейнера элементов управления. Если его нет, он продолжает расти, пока не будет контейнера. Тогда это идет в Приложение. Ресурсы. Если он находит его, он рендерит с использованием этого шаблона. Если нет, то он просто вызывает ToString (). Поместите все свои глобальные вещи в Application.Resources, чтобы вы не повторяли себя во всем приложении, сохраняйте его СУХИМ (не повторяйте себя).
На заметку. Я обнаружил, что этот пост - самое простое решение для привязки множества ViewModels к Views без явной записи каждого из них в словарь ресурсов. Он использует IValueConverter для динамического возврата желаемого представления.