Liaison de commande en XAML vs ICommand Propriétés dans le ViewModel

Je suis juste de commencer à utiliser le commandant avec MVVM dans une application. J'ai trouvé un certain nombre d'exemples et d'avoir essayé les deux façons dans mon code. Quelques exemples ont la liaison de commande dans le code xaml de la sorte:

<CommandBinding Command="local:MainWindow.OpenRecentFile" 
                Executed="{Binding OpenRecentFile_Executed}" />
...
<MenuItem Header="{x:Static culture:TextResource.RecentFilesMenuItem}" 
          Command="local:MainWindow.RecentFilesCommand" >

Avec OpenRecentFile_Executed étant une méthode dans le ViewModel et statique ICommand comme suit:

 public static readonly ICommand OpenRecentFile = 
     new RoutedCommand("Open Recent", typeof(MainWindow));

J'ai aussi vu où il y a une propriété dans le ViewModel qui est de type ICommand qui est lié à l'Affichage comme suit:

<MenuItem Header="Close Current File" 
          Command="{Binding CloseCurrentFileCommand}" 
          CommandParameter="{TemplateBinding DataContext}"/>

et dans le ViewModel:

private ICommand closeCurrentFileCommand;
public ICommand CloseCurrentFileCommand
{
    get
    {
        if (closeCurrentFileCommand == null)
        {
            closeCurrentFileCommand = 
                new RelayCommand(param => this.CloseCurrentCedarFile(param));
        }
        return closeCurrentFileCommand;
    }
}

Quels sont les avantages/inconvénients de chaque méthode?

OriginalL'auteur KrisTrip | 2011-07-05