我有一个主窗口,还有一个名为Loginwindow的窗口。 在某些方面,这个LoginWindow将显示获取一些登录信息... 在LoginWindow中我有一个按钮,它的Command属性绑定到MainViewModel中的OkCommand,如下所示:
<Button Content = "Ok" Command="{Binding OkCommand}"/>
在我的MainVeiwModel中,我添加了一个OkCommand RelayCommand
public RelayCommand OkCommand
{
get { return new RelayCommand(OkClose); }
}
private void OkClose()
{
MessageBox.Show("Close Login");
}
此代码执行良好,单击“确定”按钮时出现了MessageBox .. 但是当我点击确定按钮时如何关闭LoginWindow ...
答案 0 :(得分:1)
我提出了非常简单的解决方案。不要绑定命令并简单地处理LoginWindow代码隐藏中的Clicked事件。从那里关闭窗口真的很容易。
还有另一个原因,为什么你在不同窗口的VM中处理OK按钮?
在XAML(window.xaml)中:
<Button Content="OK" Click="button1_Click" />
在后面的代码(window.xaml.cs)中:
private void button1_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
答案 1 :(得分:0)
修改强>
在显示对话框并将VM绑定到窗口的位置,还要为该事件添加处理程序,如:
var window = new MyDialogWindow();
window.DataContext = loginViewModel;
loginViewModel.RequestClose + =(s,e)=&gt; window.Close();
为您的窗口设置名称属性:
<Button Content = "Ok" Command="{Binding OkCommand}"
CommandParameter="{Binding ElementName=_windowName}"/>
或者
<Button Content = "Ok" Command="{Binding OkCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>
在命令执行中关闭窗口:
public void Execute(object parameter)
{
var wnd = parameter as Window;
if (wnd!= null)
wnd.Close();
}