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
Vous devez vous connecter pour publier un commentaire.
Cela dépend de votre conception. Si vous optez pour l'approche rapide - une Fenêtre avec le code puis de déclarer des commandes dans le code XAML va probablement vous faire économiser du temps et de réduire l'effort sur le long terme.
Si vous allez pour un MVVM app alors je suggère fortement la liaison de ICommand que les commandes sont en général des moyens de manipuler vos données (ouverture/enregistrement/édition) et cela devrait être défini dans le ViewModel. Peut-être plus d'effort dépend de la fonctionnalité, mais MVVM est un excellent moyen d'aller si vous êtes en train de faire une application plus large.
À la fin, les deux fonctionnent de la même, mais c'est votre conception et une approche de la matière.
OriginalL'auteur hyp
Je pense que la principale différence entre eux est la acheminé la nature de la première version. Le routage aspect peut rendre la commande plus puissant pour certains scénarios, mais il peut causer plus de douleur. La douleur peut jouer, si vous essayez d'obtenir la commande à exécuter, mais la cible élément de l'interface utilisateur n'a pas le focus.
Une propriété en fonction de ICommand mise en œuvre sera toujours car il n'y a pas de "routage" étape entre l'invocation de commande et de livraison de commande.
J'ai tendance à utiliser principalement des biens en fonction des commandes de moins que mon scénario pour les fonctionnalités de routage offre.
OriginalL'auteur NathanAW