【问题标题】:Close Dialog with Prism Region Manager关闭与 Prism 区域管理器的对话
【发布时间】:2015-07-07 23:36:16
【问题描述】:

我有一个 WPF/PRISM 应用程序,我在其中使用以下代码打开了一个窗口:

RegionManager.RequestBlockingDialogNavigate(MyViewModel);

如何在不使用代码的情况下关闭该窗口?

谢谢。

【问题讨论】:

    标签: wpf mvvm prism


    【解决方案1】:

    我可以通过做其他事情来实现我的目标。基本上我只是将整个窗口作为 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 中有一些东西可以做到这一点。到目前为止我还没有找到任何东西。

    谢谢

    【讨论】:

    • 这违反了 MVVM 模式。 ViewModel 不能有对 View 的引用
    • 这就是为什么我在 PRISM 中寻求一种方法
    【解决方案2】:

    你也可以试试这个,

    <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();
    

    【讨论】:

      猜你喜欢
      • 2012-07-25
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多