How to close the popup window using mvvm in wpf?
                            
                         
                        
                     
                 
                
                    Hi,
  I created to 2 usercontrol for parent,child and one mainwindow. I refer the child window inside the popup control of parent window.In parent window i try to click the button popup window display.
Now i want close the popup window,when i try the click the childwindow submit button.Please help me.
MainWindow.xaml:
<Window x:Class="parentchild.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:my="clr-namespace:WpfLab.Controls;assembly=WpfLab.Controls"
  xmlns:local="clr-namespace:parentchild.View"
  Title="MainWindow" Height="768" Width="1280">
  <Grid>  
  <local:ParentView></local:ParentView>  
  </Grid>
</Window>
ParentView.xaml:
<UserControl x:Class="parentchild.View.ParentView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:controls="clr-namespace:parentchild.View"
  xmlns:vm="clr-namespace:parentchild.ViewModel"
  mc:Ignorable="d" 
  d:DesignHeight="768" d:DesignWidth="1280">
 
  
  <Grid x:Name="LayoutRoot" Width="1280" Height="768" Background="#2f3033">
  <Grid.Resources>
  <BooleanToVisibilityConverter x:Key="BoolToVis" />
  </Grid.Resources>
  <Canvas Margin="0.08,0.33,-0.081,0" VerticalAlignment="Top" Width="1280" Height="59" Visibility="{Binding canvasPlayerMain}" >
  
  <Button Width="144" Height="44" Content="Submit" Canvas.Left="14" Canvas.Top="8" BorderBrush="#FF496E00" Foreground="Black" Command="{Binding submitCommand}">
  
  </Button>
  
  
  <StackPanel>
  <Popup x:Name="popup" Width="100" Height="100" AllowsTransparency="True" IsOpen="{Binding IsPopupIsOpen}" Visibility="{Binding popupVisibility}">
  <Grid Background="Transparent">
  <controls:ChildView></controls:ChildView>
  </Grid>
  </Popup>
  </StackPanel>
  </Canvas>
  </Grid>
</UserControl>
ParentView.xaml.cs:
  public partial class ParentView : UserControl
  {
  public RumView()
  {
  InitializeComponent();
  
  this.DataContext = new ParentViewModel();
  }
  }
}
ParentViewModel.cs:
 public class ParentViewModel : INotifyPropertyChanged
  {
  private readonly IEventAggregator eventAggregator=new EventAggregator();
  private ParentModel currenparentModel;
  private string resultMessage;
  private bool _popupIsOpen;
  public RumViewModel()
  {
  currenrumModel = new RumModel();
  this.submitCommand = new DelegateCommand<object>(this.Execute, this.CanExecute);
  
  
  }
  public bool IsPopupIsOpen
  {
  get { return _popupIsOpen; }
  set
  {
  _popupIsOpen = value;
  NotifyPropertyChanged("IsPopupIsOpen");
  }
  }
  public ParentModel currentparent
  {
  get
  {
  return currenparentModel
  }
  set
  {
  currenparentModel= value;
  }
  }
  
  public Visibility popupVisibility
  {
  get { return this.currenrumModel.popupVisibility; }
  set
  {
  this.currenrumModel.popupVisibility = value;
  this.NotifyPropertyChanged("popupVisibility");
  }
  }
  #region commands
  public ICommand submitCommand { get; private set; }
  
  #endregion
  private bool CanExecute(object arg)
  {
  return true;
  
  }
  private void Execute(object arg)
  {
  popupVisibility = Visibility.Visible;
  IsPopupIsOpen = true;
  }  
  
  private void RaiseCanExecuteChanged()
  {
  DelegateCommand<object> tosscommand = tosscardCommand as DelegateCommand<object>;
  
  cancelcommand.RaiseCanExecuteChanged();
  }
  #region INotifyPropertyChanged Members
  public event PropertyChangedEventHandler PropertyChanged;
  private void NotifyPropertyChanged(string propertyName)
  {
  if (this.PropertyChanged != null)
  {
  this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  }
  }
  #endregion
}
ChildWindowView.xaml:
<UserControl x:Class="parentchild.View.ChildWindowView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:viewModels="clr-namespace:parentchild.ViewModel"
  xmlns:views="clr-namespace:parentchild.View"
  mc:Ignorable="d" 
  d:DesignHeight="500" d:DesignWidth="500">
  
  <Grid>
  <TextBlock HorizontalAlignment="Left" Margin="165,106,0,0" TextWrapping="Wrap" Text="Reschedule Timer" VerticalAlignment="Top" FontSize="21.333" Foreground="White" Width="174" Height="28"/>
  <TextBlock HorizontalAlignment="Left" Margin="37,199,0,0" TextWrapping="Wrap" Text="Set The Timer" VerticalAlignment="Top" FontSize="21.333" Foreground="White" Width="174" Height="28"/>
  <TextBox HorizontalAlignment="Left" Margin="252,199,0,0" TextWrapping="Wrap" Text="{Binding Path=setTimer}" VerticalAlignment="Top" Width="206" Height="38" />
  <Button Content="Submit" HorizontalAlignment="Left" Margin="252,278,0,0" VerticalAlignment="Top" Foreground="White" Width="122" Height="39" Background="Green" Command="{Binding SubmitCommand}"/>
  </Grid>
</UserControl>
ChildWindowView.xaml.cs:
 public partial class ChildWindowView : UserControl
  {
  public ChildWindowView()
  {
  InitializeComponent();
  this.DataContext = new ChildWindowViewModel();
  }
  }
ChildWindowViewModel.cs:
 public class ChildWindowViewModel : INotifyPropertyChanged
  {
  private ChildWindowModel currentChildWindow;
  private readonly IEventAggregator eventAggregator = new EventAggregator();
  public ChildWindowViewModel()
  {
  currentChildWindow = new ChildWindowModel();
  this.SubmitCommand = new DelegateCommand<object>(this.OnSubmit, this.CanSubmit);
  }
  private void RaiseCanExecuteChanged()
  {
  DelegateCommand<object> command = SubmitCommand as DelegateCommand<object>;
  command.RaiseCanExecuteChanged();
  }
  public ChildWindowModel currentTimer
  {
  get
  {
  return currentTimer;
  }
  set
  {
  currentTimer = value;
  }
  }
  public string setTimer
  {
  get { return this.currentChildWindow.setTimer; }
  set
  {
  if (this.currentChildWindow.setTimer != value)
  {
  this.currentChildWindow.setTimer = value;  
  NotifyPropertyChanged("setTimer");
  RaiseCanExecuteChanged();
  }
  }
  }
  public string errMessage
  {
  get { return this.currentChildWindow.errMessage; }
  set
  {
  if (this.currentChildWindow.errMessage != value)
  {
  this.currentChildWindow.errMessage = value;
  NotifyPropertyChanged("errMessage");
  RaiseCanExecuteChanged();
  }
  }
  }
  public ICommand SubmitCommand { get; private set; }
  private bool CanSubmit(object arg)
  {
  return true;
  }
  private void OnSubmit(object arg)
  {
  try
  {
  if (string.IsNullOrEmpty(setTimer))
  {
  this.errMessage = "Please enter Rescheduler Timer value";
  }
  
  }
  catch (Exception ex)
  {
  throw ex;
  }
  }
  
  #region INotifyPropertyChanged Members
  public event PropertyChangedEventHandler PropertyChanged;
  private void NotifyPropertyChanged(string propertyName)
  {
  if (this.PropertyChanged != null)
  {
  this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  }
  }
  #endregion