怎样才能从viewmodel命令关闭窗口?
您不需要将View实例传递给ViewModel图层。 您可以訪問主窗口這樣的 -
Application.Current.MainWindow.Close()
我看到了如上所述的ViewModel类访问你的主窗口没有问题。 按照MVVM原则,View和ViewModel之间不应该有紧密的耦合,即它们应该忽略其他操作。 在这里,我们没有将任何东西传递给View中的ViewModel。
我这样做是通过创建一个附加属性叫的DialogResult:
public static class DialogCloser
{
public static readonly DependencyProperty DialogResultProperty =
DependencyProperty.RegisterAttached(
"DialogResult",
typeof(bool?),
typeof(DialogCloser),
new PropertyMetadata(DialogResultChanged));
private static void DialogResultChanged(
DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
var window = d as Window;
if (window != null && (bool?)e.NewValue == true)
window.Close();
}
public static void SetDialogResult(Window target, bool? value)