37 votes

MVVM Light : Ajouter un EventToCommand dans XAML sans Blend, une méthode plus simple ou un snippet ?

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

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 du mal à trouver la meilleure façon de le faire.

Je sais que vous pouvez l'ajouter sans Blend, mais existe-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 sur ce sujet serait formidable.

1 votes

J'ai créé un comportement qui ne nécessite pas MVVMLight. Elle nécessite System.Windows.Interactivity, mais c'est aussi le cas de la réponse acceptée.

84voto

Derek Beattie Points 6285

Supposons que vous utilisiez .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>

1 votes

Comment cet événement peut-il alors être utilisé par le modèle de vue ?

3 votes

Il convertit l'événement en une commande, dans l'exemple, une commande sur le modèle de vue appelée LoadedCommand sera invoquée.

0 votes

Parfait, merci. J'ai fait correspondre le nom de la commande avec celui de la commande dans mon modèle de vue et cela a fonctionné comme prévu.

6voto

AbdouMoumen Points 2748

Voici un article qui parle de tout ce que vous devez savoir sur EventToCommand de la part du créateur de MVVMLight ;)

5voto

Michael Shaffer Points 354

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"

5voto

Stepan Ivanenko Points 130

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

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

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

3) Dans "View" XAML ajouter :

a)

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 ajouter la propriété nécessaire

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

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

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

C'est un travail. Je viens moi-même de l'apprendre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X