Skip to content
Snippets Groups Projects
Select Git revision
  • ed449d80d20975c70ab223a5a964a2dc0935fb64
  • master default
2 results

AsyncCommand.cs

Blame
  • AsyncCommand.cs 995 B
    using Uno.Toolkit;
    
    namespace EBLDienstplanUno.Business.API;
    
    public class AsyncCommand : ICommand, ILoadable
    {
        public event EventHandler CanExecuteChanged;
        public event EventHandler IsExecutingChanged;
    
        private Func<Task> _executeAsync;
        private bool _isExecuting;
    
        public AsyncCommand(Func<Task> executeAsync)
        {
            _executeAsync = executeAsync;
        }
    
        public bool CanExecute(object parameter) => !IsExecuting;
    
        public bool IsExecuting
        {
            get => _isExecuting;
            set
            {
                if (_isExecuting != value)
                {
                    _isExecuting = value;
                    IsExecutingChanged?.Invoke(this, new());
                    CanExecuteChanged?.Invoke(this, new());
                }
            }
        }
    
        public async void Execute(object parameter)
        {
            try
            {
                IsExecuting = true;
                await _executeAsync();
            }
            finally
            {
                IsExecuting = false;
            }
        }
    }