Я использую стандартную реализацию RelayCommand Джоша Смита для реализации ICommands в моем приложении WPF / MVVM. См .: Приложения WPF с шаблоном проектирования MVVM
Некоторые из моих методов CanExecute занимают много времени. По отдельности они не плохие (доли секунды каждый). Но я заметил, что чем больше команд я привязываю к своему пользовательскому интерфейсу, тем медленнее реагирует приложение (задержки превышают 10 секунд - чёрт).
Я полагаю, это потому, что RelayCommand CanExecuteChanged подключается к событию CommandManager.RequerySuggested, а мой шаблон ViewModel вызывает CommandManager.InvalidateRequerySuggested () как часть проверки IDataErrorInfo.
Мои ViewModels реализуют IDisposable, поэтому я попытался использовать метод OnDispose для очистки моих RelayCommands, но методы ICommand.CanExecute продолжают вызываться даже после удаления моей виртуальной машины.
Это приводит меня к выводу, что что-то (CommandManager ?, View?) Содержит ссылку на RelayCommand.
Есть ли у кого-нибудь хороший шаблон для освобождения и утилизации RelayCommands, чтобы предотвратить их повторный запрос после истечения их желаемого срока службы?
Есть ли лучший способ управлять, когда должен вызываться CanExecute?