I am trying to add multiple commands to my very first MVVM program. But the way I am adding them here feels wrong to me. I want to prevent as much duplication as possible, can I make a kind of parent command that I can easily modify for example?
internal class AddTimerBarCommand : ICommand
{
public AddTimerBarCommand(MainViewModel viewModel)
{
_MainViewModel = viewModel;
}
private MainViewModel _MainViewModel;
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
_MainViewModel.AddTimerBar();
}
}
internal class RmvTimerBarCommand : ICommand
{
public RmvTimerBarCommand(MainViewModel viewModel)
{
_MainViewModel = viewModel;
}
private MainViewModel _MainViewModel;
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
_MainViewModel.RmvTimerBar();
}
Are you looking for a base class to reduce code duplication?
If so, this might work for you:
internal abstract class TimerBarCommandBase : ICommand
{
public TimerBarCommandBase(MainViewModel viewModel)
{
_MainViewModel = viewModel;
}
protected MainViewModel _MainViewModel;
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) { return true; }
public abstract void Execute(object parameter);
}
internal class AddTimerBarCommand : TimerBarCommandBase
{
public AddTimerBarCommand(MainViewModel viewModel) : base(viewModel) { }
public override void Execute(object parameter)
{
_MainViewModel.AddTimerBar();
}
}
internal class RmvTimerBarCommand : TimerBarCommandBase
{
public RmvTimerBarCommand(MainViewModel viewModel) : base(viewModel) { }
public override void Execute(object parameter)
{
_MainViewModel.RmvTimerBar();
}
}