How To Open A Child Window From View Model In MVVM In WPF

If you are new to MVVM pattern using Prism Library then you can follow my very first article to start the MVVM and add the dlls into the project from the below link,

Now I will show you a demo to show a popup window on the view via the click event of a button from the view in view model.

Note: In this article I am using Visual Studio 2013 and ‘Prism.Unity’ via nugget Packages.

Step 1: Create a project named ‘PrismMVVMTestProject’ of WPF application.


Step 2: It’s a better approach to create the three different folders in the project for Model, View and View model respectively.


Step 3: Create pages in all folders

i. Create a View Named ‘TestView.xaml’ as a parent page in the Views folder.


ii. Also create a View Named ‘PopUpWindow.xaml’ as a child page in the Views folder.


iii. Create a Model Named ‘TestModel.cs’ in the Models folder.


Note: We don’t not need Model in this article, I have just created it for the best practices.

iv. Create a ViewModel Named ‘TestViewModel.cs’ in the ViewModels folder.


Step 4: Add a label on the child window page named ‘PopupWindow.xaml’

  1. <Label Content="This is Pop Up window" HorizontalAlignment="Left" VerticalAlignment="Top"  
  3. Margin="67,113,0,0"/>  


Step 5:

a. Add the below namespaces on the TestViewModel page,

  • ‘Prism.MVVM’ To inherit the class named ‘Bindable Base’.
  • PrismMVVMTestProject.Views’ To accessing child window in this page.
  • System.Windows.Input To add ICommand.
  • Prism.Commands To Use DelegateCommand.

b. Create a command named ‘ShowCommand’

c. Attach that command to the method named ‘ShowMethod’ which will act like event where will add the show the child window from the view model.

d. Create a object of child window and show it,

  1. using PrismMVVMTestProject.Views;  
  2. using Prism.Mvvm;  
  3. using System.Windows.Input;  
  4. using Prism.Commands;  
  5. using System.Windows.Data;  
  6. namespace PrismMVVMTestProject.ViewModels  
  7. {  
  8.     class TestViewModel: BindableBase   
  9.     {  
  10.         public ICommand ShowCommand   
  11.         {  
  12.             get;  
  13.             private set;  
  14.         }  
  15.         public TestViewModel() {  
  16.             ShowCommand = new DelegateCommand(ShowMethod);  
  17.         }  
  18.         private void ShowMethod() {  
  19.             PopUpWindow objPopupwindow = new PopUpWindow();  
  20.             objPopupwindow.Show();  
  21.         }  
  22.     }  
  23. }  


Step 6:

· Add a button to show the child window with ShowCommand property and bind it that command which we have created in view model.

  1. <Button Content="Show Popup" Command="{Binding ShowCommand}" HorizontalAlignment="Left"  
  3. VerticalAlignment="Top" Width="75" Margin="31,21,0,0"/>  


Step 7: AddPrismMVVMTestProject.ViewModels’ namespace and bind Data Context of TestView Page to the ViewModel named ‘TestViewModel’.

  1. using System.Windows;  
  2. using PrismMVVMTestProject.ViewModels;  
  3. namespace PrismMVVMTestProject.Views  
  4. {  
  5.     /// <summary>  
  6.     /// Interaction logic for TestView.xaml  
  7.     /// </summary>  
  8.     public partial class TestView: Window   
  9.     {  
  10.         public TestView()  
  11.         {  
  12.             InitializeComponent();  
  13.             this.DataContext = new TestViewModel();  
  14.         }  
  15.     }  
  16. }  


Step 8: Change the ‘StartupUri’ from default page ‘MainWindow’ to ‘TestView’ page,


Run the page and See the Output:


After click on the ‘Show PopUp’ button, it will show the child window.


Read more articles on WPF: