Является ли реализация Джоша Смита RelayCommand ошибочной?

Рассмотрим ссылкуСтатья Джоша Смита «Приложения WPF с шаблоном проектирования Model-View-ViewModel», в частности, пример реализацииRelayCommand (На рисунке 3). (Нет необходимости читать всю статью по этому вопросу.)

В целом, я думаю, что реализация отличная, но у меня есть вопрос о делегированииCanExecuteChanged подписки наCommandManager«sRequerySuggested событие.документация дляRequerySuggested состояния:

Поскольку это событие является статическим, оно будет удерживать обработчик только как слабую ссылку. Объекты, которые прослушивают это событие, должны сохранять строгую ссылку на свой обработчик события, чтобы избежать его сбора мусора. Это может быть достигнуто с помощью закрытого поля и назначения обработчика в качестве значения до или после присоединения к этому событию.

Тем не менее пример реализацииRelayCommand не поддерживает ничего такого для подписанного обработчика:

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}
Это утечка слабой ссылки доRelayCommandклиент, требующий, чтобы пользовательRelayCommand понять реализациюCanExecuteChanged и поддерживать живую ссылку сами?

Если да, имеет ли смысл, например, модифицировать реализациюRelayCommand быть что-то вроде следующего, чтобы смягчить потенциальную преждевременную сборку изCanExecuteChanged абонент:

// This event never actually fires.  It's purely lifetime mgm't.
private event EventHandler canExecChangedRef;
public event EventHandler CanExecuteChanged
{
    add 
    { 
        CommandManager.RequerySuggested += value;
        this.canExecChangedRef += value;
    }
    remove 
    {
        this.canExecChangedRef -= value;
        CommandManager.RequerySuggested -= value; 
    }
}

Ответы на вопрос(5)

Ваш ответ на вопрос