ViewModel中的属性更改时WPF关闭窗口

时间:2011-06-09 17:52:11

标签: wpf data-binding window

我想知道在视图模型中的属性发生更改时是否有办法关闭窗口。在我的情况下,我有一个登录窗口,其中一个Ok按钮绑定到LoginCommand,以便在单击Ok时执行Login功能。如果登录成功,我希望窗口关闭。

现在我知道我可以通过在我的按钮上添加一个事件处理程序来实现这个目的,它调用这样的函数:

private void Button_Click(object sender, RoutedEventArgs e)
{
  DatabaseCredentialsViewModel vm = (this.DataContext as DatabaseCredentialsViewModel);
  vm.Login();

  if (vm.LoginSuccessful)
  {
    this.Close();
  }
}

但是我想知道在LoginSuccessful属性发生变化时是否有办法关闭窗口而我的按钮上没有事件处理程序(我喜欢只使用命令绑定而不在Click事件上使用事件处理程序)。

谢谢

3 个答案:

答案 0 :(得分:2)

Here's a similar question,满足了我的需求。

基本上,您为窗口使用附加属性,该属性绑定到VM上的bool?属性。当VM属性设置为非null值时,附加属性设置Window的DialogResult,它将自动关闭窗口。

答案 1 :(得分:1)

如果您愿意,可以尝试这种不同的方法 您可以通过将OK按钮与命令相关联来完成此操作。创建一个事件,如LoginSuccess,然后添加一个window.Close()到事件回调列表。然后你只需要提升LoginSuccess事件来关闭窗口 在我看来,这方面的MVVM模式定义了一个事件,可以用于其他触发器,而不仅仅是关闭窗口。

答案 2 :(得分:0)

您可以通过创建挂在窗口中的attached propertyBehavior(来自Blend SDK)来相当轻松地完成此操作。

我发布了sample behavior to the Expression Code Gallery,它做了类似的事情(虽然绝对不同) - 它可以防止窗口通过VM上的属性关闭。您可以非常轻松地调整代码(包含在下载中)以关闭属性更改窗口。

相关问题