Я только начинаю использовать командование с MVVM в приложении.Я нашел несколько примеров и попробовал оба способа в своем коде.В некоторых примерах привязка команд в xaml выглядит следующим образом:
<CommandBinding Command="local:MainWindow.OpenRecentFile"
Executed="{Binding OpenRecentFile_Executed}" />
...
<MenuItem Header="{x:Static culture:TextResource.RecentFilesMenuItem}"
Command="local:MainWindow.RecentFilesCommand" >
С OpenRecentFile_Executed, являющимся методом в ViewModel, и статической ICommand, например, так:
public static readonly ICommand OpenRecentFile =
new RoutedCommand("Open Recent", typeof(MainWindow));
Я также видел, гдев ViewModel есть свойство типа ICommand, которое связано в View следующим образом:
<MenuItem Header="Close Current File"
Command="{Binding CloseCurrentFileCommand}"
CommandParameter="{TemplateBinding DataContext}"/>
и в ViewModel:
private ICommand closeCurrentFileCommand;
public ICommand CloseCurrentFileCommand
{
get
{
if (closeCurrentFileCommand == null)
{
closeCurrentFileCommand =
new RelayCommand(param => this.CloseCurrentCedarFile(param));
}
return closeCurrentFileCommand;
}
}
Каковы преимущества /недостатки каждого метода?