Tag: weak references

Josh Smith对RelayCommand的执行有缺陷吗?

请参考Josh Smith的文章WPF Apps与Model-View-ViewModeldevise模式 ,特别是RelayCommand的示例实现(在图3中)。 (无需阅读整个文章的这个问题。) 一般来说,我认为这个实现是非常好的,但是我有一个关于将CanExecuteChanged订阅委托给CommandManager的RequerySuggested事件的问题。 RequerySuggested的文档状态如下: 由于这个事件是静态的,所以它只能作为一个弱引用持有处理程序。 监听这个事件的对象应该对它们的事件处理器保持强有力的引用,以避免垃圾收集。 这可以通过在附加到该事件之前或之后拥有私有字段并将该处理程序指定为值来实现。 然而, RelayCommand的示例实现并不维护订阅的处理程序: public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } 这是否RelayCommand弱引用泄漏到RelayCommand的客户端,要求RelayCommand的用户了解RelayCommand的实现并自行维护一个实时引用? 如果是这样,是否有意义,例如,修改RelayCommand的实现类似于以下内容,以减轻CanExecuteChanged订阅者可能过早的GC: // This event never actually fires. It's purely lifetime mgm't. private event EventHandler canExecChangedRef; public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += […]