WPF的MVVM框架Stylet开发文档 6. 窗口管理器 WindowManager

6.The WindowManager(窗口管理器)

在传统的 View-first 方法中,如果你想显示一个新窗口或对话框,你创建一个新的 View 实例,然后调用.Show()or .ShowDialog()

在 ViewModel-first 方法中,您不能直接与视图交互,所以您不能这样做。WindowManager 解决了这个问题 - 调用IWindowManager.ShowWindow(someViewModel)将采用那个 ViewModel,找到它的视图,实例化它,将它绑定到那个 ViewModel,然后显示它。

class SomeViewModel
{
   private IWindowManager windowManager;
   public SomeViewModel(IWindowManager windowManager)
   {
      this.windowManager = windowManager;
   }
 
   public void ShowAWindow()
   {
      var viewModel = new OtherViewModel();
      this.windowManager.ShowWindow(viewModel);
   }
 
   public void ShowADialog()
   {
      var viewModel = new OtherViewModel();
      bool? result = this.windowManager.ShowDialog(viewModel);
      // result 持有 Window.ShowDialog() 的返回值
      if (result.GetValueOrDefault(true))
      {
         // DialogResult 被设置为 true
      }
   }
}

此外,IWindowManager 的引入(而不是直接在ViewModel上调用方法)使测试变得更加容易。

要从其 ViewModel 关闭窗口或对话框,请使用Screen.RequestClose,如下所示:

class ViewModelDisplayedAsWindow
{
   // 按“关闭close”按钮调用
   public void Close()
   {
      this.RequestClose();
   }
}
 
class ViewModelDisplayedAsDialog
{
   // 按“OK”按钮调用
   public void CloseWithSuccess()
   {
      this.RequestClose(true);
   }
}

项目原地址:https://github.com/canton7/Stylet
当前文档原地址:https://github.com/canton7/Stylet/wiki/The-WindowManager

上一篇:WPF的MVVM框架Stylet开发文档 5. Actions
下一篇:WPF的MVVM框架Stylet开发文档 7. 消息框MessageBox

你可能感兴趣的:(MVVM,Stylet框架,wpf,c#,开发语言)