作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个 Button
,当它被点击时它会关闭我的窗口:
<Button x:Name="buttonOk" IsCancel="True">Ok</Button>
在我将 Command
添加到 Button
之前这很好,即
<Button x:Name="buttonOk"
Command="{Binding SaveCommand}"
IsCancel="True">Ok</Button>
现在它没有关闭,大概是因为我正在处理 Command
。我可以通过放入 EventHandler
并调用 this.Close()
来解决这个问题,即
<Button x:Name="buttonOk"
Click="closeWindow"
Command="{Binding SaveCommand}"
IsCancel="True">Ok</Button>
但现在我的代码后面有代码,即方法 SaveCommand
。我正在使用 MVVM 模式,SaveCommand
是我后面的代码中唯一的代码。
我怎样才能以不同的方式执行此操作,以免使用代码隐藏?
最佳答案
我刚刚完成了一个 blog post关于这个话题。简而言之,使用 get
和 set
访问器将 Action
属性添加到您的 ViewModel。然后从您的 View
构造函数定义 Action
。最后,在应该关闭窗口的绑定(bind)命令中调用您的操作。
在 View 模型中:
public Action CloseAction { get; set;}
在 View
构造函数中:
private View()
{
InitializeComponent();
ViewModel vm = new ViewModel();
this.DataContext = vm;
if ( vm.CloseAction == null )
vm.CloseAction = new Action(this.Close);
}
最后,在任何应该关闭窗口的绑定(bind)命令中,我们可以简单地调用
CloseAction(); // Calls Close() method of the View
这对我有用,似乎是一个相当优雅的解决方案,并为我节省了大量编码工作。
关于c# - WPF MVVM : How to close a window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376475/
我是一名优秀的程序员,十分优秀!