C# 我可以简化这个代码吗?如果是这样,怎么办

C# 我可以简化这个代码吗?如果是这样,怎么办,c#,simplification,C#,Simplification,我正在尝试向我的第一个MVVM程序添加多个命令。 但我在这里添加它们的方式让我感觉不对。 我希望尽可能地防止重复,例如,我可以制作一种可以轻松修改的父命令吗 internal class AddTimerBarCommand : ICommand { public AddTimerBarCommand(MainViewModel viewModel) { _MainViewModel = viewModel; } private MainView

我正在尝试向我的第一个MVVM程序添加多个命令。 但我在这里添加它们的方式让我感觉不对。 我希望尽可能地防止重复,例如,我可以制作一种可以轻松修改的父命令吗

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();
    }

您是否正在寻找一个基类来减少代码重复

如果是这样,这可能对您有用:

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();
    }
}

Enigmativity给出的答案很好,因为您需要一种优化代码的方法

但是,在MVVM中,当涉及到使用
ICommand
时,通常我们使用在用于项目的MVVM框架中实现的
RelayCommand


下面是MVVM Light的开发者Laurent Bugnon写的一篇文章。使用此功能,您不必每次绑定命令时都创建一个新类,因此将“尽可能防止重复”。

您是否使用任何MVVM框架(例如:MVVM Light)?我没有,我读了一些关于MVVM的文章并观看了一些视频,现在正试着对这一切进行思考。我想我理解它的大意。为什么?看看我的答案:-)非常有趣,我不知道我可以将构造函数建立在父构造函数的基础上。我要玩这个