web-dev-qa-db-fra.com

MVVM Light: Ajouter EventToCommand dans XAML sans Blend, manière plus simple ou extrait?

Quelqu'un peut-il me dire quelle est la syntaxe réelle pour la classe EventToCommand. D'après ce que je crois, c'est que la classe EventToCommand fonctionne avec Silverlight/WPF et WP7, donc je pense que c'est un meilleur choix pour descendre.

D'après ce que je crois, je peux ajouter n'importe quel événement de clic et le forcer dans mon ViewModel, mais j'ai un problème pour trouver la meilleure façon de le faire.

Je sais que vous pouvez l'ajouter sans Blend, mais y a-t-il des extraits disponibles?

Ou existe-t-il un moyen plus simple de l'ajouter via VS 2010? Toute aide ou si quelqu'un connaît un bon tutoriel à ce sujet serait formidable.

35
Martin

Supposons que vous utilisez .NetFramework4:

Ajoutez d'abord namespace:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;Assembly=GalaSoft.MvvmLight.Platform"

Syntaxe de l'événement Loaded.

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <cmd:EventToCommand Command="{Binding Mode=OneWay, Path=LoadedCommand}"
                            PassEventArgsToCommand="True" />
    </i:EventTrigger>
</i:Interaction.Triggers>
73
Derek Beattie

J'ai mis à jour mon projet et il semble qu'ils aient déplacé la commande vers:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;Assembly=GalaSoft.MvvmLight.Platform"
4
Michael Shaffer

0) si vous ne connaissez pas WPF et MVVM, lisez l'article de Josh Smith sur WPF et MVVM https://msdn.Microsoft.com/en-us/magazine/dd419663.aspx

1) Dans votre projet, ajoutez un package (via NuGet) MvvmLightLibs

2) ajouter une référence à System.Windows.Interactivity

3) Dans "View" XAML, ajoutez:

une)

xmlns:i="clr-namespace:System.Windows.Interactivity;Assembly=System.Windows.Interactivity"
xmlns:command="http://www.galasoft.ch/mvvmlight"

b)

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Closing">
      <command:EventToCommand Command="{Binding OnClosingCommand}"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Window>

4) Dans ViewModel, ajoutez la propriété nécessaire

public ICommand OnClosingCommand
{
  get
  {
    return new RelayCommand(() => SomeMethod());
  }
}

P.S. Dans votre vue doit être spécifié DataContext (XAML)

  <Window.DataContext>
    <vm:MainWindowViewModel/>
  </Window.DataContext>

C'est du travail. Je viens moi-même d'apprendre.

3
Stepan Ivanenko