Du hast auf den Branch log-test-branch 2026-04-12 20:57:35 +00:00 gepusht
Neuer Pull-Request
Du hast auf den Branch anon-test2 2026-04-12 20:50:35 +00:00 gepusht
Neuer Pull-Request
Dateien
Soft-LTS/ViewModels/RelayCommand.cs
2026-04-12 17:22:31 +02:00

61 Zeilen
1.5 KiB
C#

using System.Windows.Input;
namespace PrinterMonitor.ViewModels;
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool>? _canExecute;
public RelayCommand(Action execute, Func<bool>? canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public event EventHandler? CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
public bool CanExecute(object? parameter) => _canExecute?.Invoke() ?? true;
public void Execute(object? parameter) => _execute();
}
/// <summary>
/// Führt ein async-Lambda als ICommand aus.
/// Während der Ausführung ist CanExecute=false (verhindert Doppelklick).
/// </summary>
public class AsyncRelayCommand : ICommand
{
private readonly Func<Task> _execute;
private bool _isExecuting;
public AsyncRelayCommand(Func<Task> execute)
{
_execute = execute;
}
public event EventHandler? CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
public bool CanExecute(object? parameter) => !_isExecuting;
public async void Execute(object? parameter)
{
_isExecuting = true;
CommandManager.InvalidateRequerySuggested();
try { await _execute(); }
finally
{
_isExecuting = false;
CommandManager.InvalidateRequerySuggested();
}
}
}