我們有一個功能強大的應用程序。功能區按鈕都綁定到我的主視圖模型(主應用程序窗口的數據上下文)中的命令。ICommand實現在單獨的類中,僅使用MVVM Light?
當我們創建大量的RelayCommands(綁定到各種功能區命令)時,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 Light,所以我不想添加更多的MVVM框架。但我也不想重新發明輪子。
更新:MainViewModel.cs不需要混雜在#分區或命令方法的分數。擴展方法不適合恕我直言。
如何創建一個命令和內部commandparameter您指定將用於if語句是一個命令的執行方法內的條件? –
@devhedgehog我正在尋找將每個命令分成它自己的類,但以一種不反對已建立的MVVM約定或MVVM Light的工具的方式(請參閱鏈接問題)。 –