命令绑定 - 即使在WPF应用程序中关闭窗口后,也会调用CanExecute()

时间:2011-10-11 17:48:25

标签: wpf

我有一个工具栏,它有自己的视图模型。我使用命令绑定处理视图模型中的点击。我已经使用了codeplex的命令类来提供工具包。当我关闭窗口并在同一个应用程序中打开另一个窗口时,我看到我之前关闭的窗口的方法的CanExecute()被调用。我已经通过使用CommandManager.InvalidateRequerySuggested()确认CommandManager仍然持有引用!! CommandManager应该保持弱引用,但由于某种原因它根本不释放代理。

我在这里做错了什么?我怎样才能克服这个问题?

2 个答案:

答案 0 :(得分:2)

发生这种情况的原因是CommandManager没有线索它应该停止触发CanExecute,直到处理程序被垃圾收集。

我有同样的问题,我已经通过在关闭窗口后将窗口的DataContext设置为null来解决它。假设命令绑定到ViewModel(删除他的DataContext注销canExecute事件处理程序),它工作正常。

答案 1 :(得分:0)

作为surfen回答的附录,我最终通过添加一行来解决了这个问题

CommandBindings.Clear()

在我的窗口的Closed事件中。如果所有命令绑定都是在Window上进行的,那么这应该可以工作,否则您应该在拥有CommandBindings的任何控件上调用它。