У меня есть форма WPF с 16 кнопками на нем. Когда моя модель представления инициализируется, мне нужно установить все 16 как объекты RelayCommand. Это все мой метод Initialize(), но это вызывает ошибку CA1502 анализа кода: AvoidExcessiveComplexity.Анализ кода AvoidExcessiveComplexity - Just Setting Commands
Это хороший случай для подавления предупреждения CA, или есть более элегантный способ установить эти команды, не вызывая нарушения CA?
[SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification = "Simply setting the commands")]
private void Initialize()
{
this.AddApplicationCommand = new RelayCommand(_ => AddApplication());
this.DeleteApplicationCommand = new RelayCommand(_ => DeleteApplication(), _ => ApplicationIsSelected);
this.RefreshApplicationsCommand = new RelayCommand(_ => RefreshApplications());
this.SaveApplicationCommand = new RelayCommand(_ => SaveApplication(), _ => ApplicationIsSelected);
this.ForceInstallationCommand = new RelayCommand(_ => ForceInstallation(), _ => ApplicationIsSelected);
this.DeleteForceInstallationCommand = new RelayCommand(_ => DeleteForceInstallation(), _ => ApplicationIsSelectedAndForceExists());
this.AddTaskCommand = new RelayCommand(_ => AddTask(), _ => ApplicationIsSelected);
this.EditTaskCommand = new RelayCommand(_ => EditTask(), _ => TaskIsSelected());
this.DeleteTaskCommand = new RelayCommand(_ => DeleteTask(), _ => TaskIsSelected());
this.ImportTasksCommand = new RelayCommand(_ => ImportTasks(), _ => ApplicationIsSelected);
this.ExportTasksCommand = new RelayCommand(_ => ExportTasks(), _ => TaskIsSelected());
this.ImportLegacyTasksCommand = new RelayCommand(_ => ImportLegacyTasks(), _ => ApplicationIsSelected);
this.MoveTaskUpCommand = new RelayCommand(_ => MoveRowUp(), _ => TaskIsSelected());
this.MoveTaskDownCommand = new RelayCommand(_ => MoveRowDown(), _ => TaskIsSelected());
this.AddVariableGroupCommand = new RelayCommand(_ => AddVariableGroup());
this.RemoveVariableGroupCommand = new RelayCommand(_ => RemoveVariableGroup(), _ => VariableGroupIsSelected());
}
У меня действительно есть контроль над RelayCommand. Я не понимаю, однако, я уже использую его с этим конструктором: public RelayCommand (Action
Вы преобразовываете свои функции с нулевым аргументом в один аргумент один раз для Action и Predicate с _ => F() lambdas. Если вы устраните необходимость в этом коде конверсии, будет более компактным Relay (DeleteTask, IsApp) и никаким предупреждением. –
Думаю, я вижу, что вы сейчас говорите. Поскольку мои Action и Func не используют параметры, удалите их. Единственная проблема заключается в том, что System.Windows.Input.ICommand указывает это: bool CanExecute (параметр объекта). И RelayCommand реализует ICommand для привязки WPF. –