我可以简化这段代码吗?如果是这样的话
Can I simplify this code? And if so how
我正在尝试向我的第一个 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();
}
您是否正在寻找基础 class 来减少代码重复?
如果是这样,这可能对你有用:
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
。
这是 tutorial 由 MVVM Light 的开发者 Laurent Bugnion 编写的。使用它,您不必在每次要绑定命令时都创建一个新的 class,因此将 "prevent as much duplication as possible".
我正在尝试向我的第一个 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();
}
您是否正在寻找基础 class 来减少代码重复?
如果是这样,这可能对你有用:
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
。
这是 tutorial 由 MVVM Light 的开发者 Laurent Bugnion 编写的。使用它,您不必在每次要绑定命令时都创建一个新的 class,因此将 "prevent as much duplication as possible".