MyTetra Share
Делитесь знаниями!
Использование комманд
Время создания: 16.11.2019 20:05
Текстовые метки: Комманды, ICommand
Раздел: Компьютер - C# - WPF
Запись: Kozlov-AE/Tetra/master/base/15739239117wpae4zpi8/text.html на raw.githubusercontent.com

1. Создаем класс Command. Наследуем его от интерфейса ICommand. Далее всё стандартно:


class Command : ICommand

{

private Action<object> execute; //Фукция которую будем передавать

private Func<object, bool> canExecute; //Условие, при котором можно выполнять команду

public event EventHandler CanExecuteChanged

{

add { CommandManager.RequerySuggested += value; }

remove { CommandManager.RequerySuggested -= value; }

}


public Command(Action<object> execute, Func<object, bool> canExecute = null)

{

this.execute = execute;

this.canExecute = canExecute;

}


public bool CanExecute(object parameter)

{

return this.canExecute == null || this.canExecute(parameter);

}


public void Execute(object parameter)

{

this.execute(parameter);

}

}


Как использовать:

В классе ДатаКонтекста (ViewModel)


Command serializeCompanyToXML; // Объявил приватную команду


public Command SerializeCompanyToXML //Это как типа публичного свойства

{

get => serializeCompanyToXML ?? // это приватная комманда

(serializeCompanyToXML = new Command(obj => //Создаем новый объект калсса комманд (см выше)

{ //Тут начинается выполение всяких методов (можно просто свой метод засунуть)

SaveFileDialog saveFileDialog = new SaveFileDialog();

saveFileDialog.Filter = "XML документ|*.xml";

if (saveFileDialog.ShowDialog() == true)

{

selectedCompany.SerializeToXML(saveFileDialog.FileName);

}

},

obj => selectedCompany != null //Это проверка на возможность выполнения команды. Если в окне не выделена компания, то во вью модель не передана компания и в этой переменной ничего нет. А значит элемент реализующий эту комнду будет не активен.

));

}


 
MyTetra Share v.0.55
Яндекс индекс цитирования