【发布时间】:2014-03-03 20:09:18
【问题描述】:
我们有一个带有丝带的大型应用程序。功能区按钮都绑定到我的主视图模型(主应用程序窗口的数据上下文)中的命令。
随着我们创建大量 RelayCommand(绑定到各种功能区命令),MainViewModel 的构造函数开始增长。它看起来像这样:
public MainWindowViewModel()
{
this.OpenProjectCommand = new RelayCommand(() =>
{
// buncha code
});
this.ProjectTypesCommand = new RelayCommand(() =>
{
// more code
});
this.NewSectionCommand = new RelayCommand(() =>
{
// code code code...
});
// ... only three ribbon buttons down, this is gonna get huge...
}
我更希望有单独的类来实现每个命令,而不是 MainViewModel 的构造函数中的大量内联代码。 (或者在 MainViewModel 中创建大量委托,例如 OpenProject、CanOpenProject,然后将它们的引用传递给 RelayCommand 构造函数)。
我为什么不简单地在 CommandBase 中实现 ICommand,然后创建单独的命令?因为我想按照this question 成为“标准友好型”。
是否可以使用标准的 ICommand 实现,以便我的命令位于不同的类中?
我不想添加更多的 MVVM 框架,因为我已经在使用 MVVM Light。但我也不想重新发明轮子。
更新:MainViewModel.cs 不需要杂乱无章的#regions 或命令方法。恕我直言,扩展方法也不适合。
【问题讨论】:
-
如何创建一个命令并在命令参数中指定一个条件,该条件将由该命令的执行方法中的 if 语句使用?
-
@devhedgehog 我希望将每个命令分成自己的类,但不会与既定的 MVVM 约定或 MVVM Light 的工具发生冲突(请参阅链接问题)。
标签: c# wpf mvvm mvvm-light command-pattern