【发布时间】:2015-07-07 23:36:16
【问题描述】:
我有一个 WPF/PRISM 应用程序,我在其中使用以下代码打开了一个窗口:
RegionManager.RequestBlockingDialogNavigate(MyViewModel);
如何在不使用代码的情况下关闭该窗口?
谢谢。
【问题讨论】:
我有一个 WPF/PRISM 应用程序,我在其中使用以下代码打开了一个窗口:
RegionManager.RequestBlockingDialogNavigate(MyViewModel);
如何在不使用代码的情况下关闭该窗口?
谢谢。
【问题讨论】:
我可以通过做其他事情来实现我的目标。基本上我只是将整个窗口作为 CloseCommand 的参数传递并从 ViewModel 中关闭它。
<Button Content="Close" Command="{Binding CloseCommand}" CommandParameter="{Binding ElementName=MyWindow}" />
在视图模型中,我只是这样做了:
public DelegateCommand<Window> CloseCommand { get; private set;}
public MyViewModel()
{
CloseCommand = new DelegateCommand<Window>(Close);
}
public void Close(Window window)
{
window.Close();
}
我认为 PRISM 中有一些东西可以做到这一点。到目前为止我还没有找到任何东西。
谢谢
【讨论】:
你也可以试试这个,
<Button Content="Close" Command="{Binding CloseCommand}" />
public DelegateCommand CloseCommand { get; private set;}
public MyViewModel()
{
CloseCommand = new DelegateCommand(()=>
{
foreach (Window window in Application.Current.Windows)
{
if (window is DialogView)//your window type come here
{
window.Close();
} }
});
}
如果窗口是用 .ShowDialog(); 显示的,这将不起作用
或者代替 foreach,对话框视图是你的窗口
Application.Current.Windows.OfType<DialogView>().FirstOrDefault().Close();
【讨论】: