在MVVM模式中,ViewModel不应直接处理视图(如窗口)。但是,你可以通过使用命令和数据绑定来实现关闭窗口的功能。以下是一个简单的示例:
首先,你需要创建一个命令,这个命令将在ViewModel中定义,并在视图中使用。
public class RelayCommand : ICommand
{
private Action<object> execute;
public RelayCommand(Action<object> execute)
{
this.execute = execute;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
this.execute(parameter);
}
public event EventHandler CanExecuteChanged;
}
然后,在ViewModel中,你可以创建一个命令来关闭窗口:
public class MyViewModel
{
public ICommand CloseWindowCommand { get; private set; }
public MyViewModel()
{
this.CloseWindowCommand = new RelayCommand(CloseWindow);
}
private void CloseWindow(object window)
{
if (window != null && window is Window)
{
((Window)window).Close();
}
}
}
最后,在视图中,你可以将按钮的Click事件绑定到这个命令,并将窗口本身作为命令参数:
<Button Content="Close" Command="{Binding CloseWindowCommand}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>
在这个示例中,当你点击按钮时,它将执行CloseWindowCommand
命令,该命令将关闭窗口。
领取专属 10元无门槛券
手把手带您无忧上云