C# 从CommandManager取消订阅。是否建议重新查询?WPF
我在WPF中实现了一个简单的C# 从CommandManager取消订阅。是否建议重新查询?WPF,c#,wpf,events,C#,Wpf,Events,我在WPF中实现了一个简单的按钮,它在XAML中绑定到ICommand 虽然它工作得很好,但我通过以下代码触发了CanExecute(): public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value;
按钮
,它在XAML中绑定到ICommand
虽然它工作得很好,但我通过以下代码触发了CanExecute()
:
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
问题是,实例化的ICommand
被此事件保持活动状态,即使在我完成它之后,CanExecute()
仍由CommandManager
持续触发
我想我在
ICommand
实例中得到了一个临时的不受欢迎的补丁,它以List
的形式出现,添加了add{}
中的每个传入值,然后我通过迭代它并调用CommandManager.RequerySuggested-=eventItem
,手动取消订阅,但我想知道是否有更好的方法,或者我用错了吗?请阅读这里-这似乎表明它应该被垃圾收集,但随后大量用户报告它不是,并且仍在调用CanExecute
,这也是我面临的问题…您在发布时检查了它而没有调试器吗?啊,因此,它在没有调试器的情况下可以正常工作,但这还不够好。不幸的是:(.为什么这不好?调试器是Studio的一个非常好的功能,但是,是的,它在处理时工作起来有点奇怪。