MVVM رو به شکل های مختلفی میشه پیاده سازی کرد (حالا نمیدونم شما چه روشی رو استفاده کردید) اما در کل برای اینکه بر اساس یک شرایطی یک view متناسب با یک viewmodel رو اگر بخواید در main view نشون بدید، به این شکل عمل میشه که در main view یک DataTemplate بصورت resource تعریف می کنید و DataType اون رو به کلاس ViewModel مورد نظر Set می کنید، و مقدار Template اون DataTemplate رو هم به کلاس View متناسب با اون ViewModel مقدار میدید. بعد اون container ای که قراره view ها در اون load بشن رو DataSource اش رو به viewModel، بایند می کنید. معمولا از کنترل ItemsControl به عنوان container استفاده میشه.
نمونه کد:
<Window.Resources>
<DataTemplate DataType="{x:Type myViewModelsNameSpace:MyViewModel}">
<myViewsNameSpace:MyView/>
</DataTemplate>
</Window.Resources>
DataSource یا DataContext (بر اساس نوع container) کنترلی رو که به عنوان contiainer استفاده کردید رو bind می کنید به property از viewModel متناظر با MainView که اون property حاوی ViewModel ای هست که شما میخواین بر اساس اون یک View رو load کنین. اون DataTemplate باعث میشه که بر اساس نوع ViewModel ای که از طریق binding میاد به کانتینر، View تعریف شده در DataTemplate رو داخلش load کنه. به عبارت دیگه، اگر ViewModel ای bind شده به container، از نوع MyViewModel باشه، داخلش MyView لود میشه ، چون تو DataTemplate اینجوری تعریف شده. حالا شما اگر چند تا View رو میخواین نشون بدید، باید برای هر کدوم یک DataTemplate به همین صورت داشته باشید.
موفق باشید