How to close PopUp window in wpf using mvvm?
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