在传统的View-frist方式中,如果想要显示了一个新的Window或Dialog,需要创建一个View的实例,并且调用.Show()或.ShowDialog()方法。
在ViewModel-first方式中,不能直接与Views交互,WindowManager解决了这个问题,只需要调用IWindowManager.ShowWindow(someViewModel)就可以调用ViewModel,发现其View,实例化并显示。
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 holds the return value of Window.ShowDialog()
if (result.GetValueOrDefault(true))
{
// DialogResult was set to true
}
}
}
很优雅也很简单!此外,引入IWindowMmanager使得测试更容易。
要关闭Window或Dialog,使用Screen.RequestClose,如下所示:
class ViewModelDisplayedAsWindow
{
// Called by pressing the 'close' button
public void Close()
{
this.RequestClose();
}
}
class ViewModelDisplayedAsDialog
{
// Called by pressing the 'OK' button
public void CloseWithSuccess()
{
this.RequestClose(true);
}
}