MVVM Light: dodawanie EventToCommand w XAML bez Blend, easier way lub snippet?

Czy ktoś może mi powiedzieć jaka jest faktyczna składnia EventToCommand klasy. Z tego, co uważam, że EventToCommand klasa działa z Silverlight / WPF i WP7, dlatego myślę, że jej lepszym wyborem jest zejście w dół.

Z tego co wierzę, Mogę dodać każde zdarzenie kliknięcia i wprowadzić je do mojego ViewModel, ale mam problem ze znalezieniem najlepszego sposobu na to.

Wiem, że można go dodać bez blendu, ale czy są dostępne fragmenty?

A może jest łatwiejszy sposób na dodanie go przez VS 2010? Każda pomoc lub jeśli ktoś zna dobry tutorial na ten temat byłby świetny.

Author: Ruben Bartelink, 2011-05-03

4 answers

Załóżmy, że używasz .NetFramework4:

Pierwszy dodaj namespace:

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

Składnia załadowanego zdarzenia.

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <cmd:EventToCommand Command="{Binding Mode=OneWay, Path=LoadedCommand}"
                            PassEventArgsToCommand="True" />
    </i:EventTrigger>
</i:Interaction.Triggers>
 67
Author: Derek Beattie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-21 16:34:51

Oto post, który mówi o wszystko, co musisz wiedzieć o EventToCommand od twórcy MVVMLight;)

 8
Author: AbdouMoumen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-03 14:56:40

Zaktualizowałem swój projekt i wygląda na to, że przenieśli komendę do:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
 3
Author: Michael J Shaffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-18 20:10:03

0) jeśli nie znasz WPF i MVVM, przeczytaj artykuł Josha Smitha o wzorze WPF i MVVM https://msdn.microsoft.com/en-us/magazine/dd419663.aspx

1) w Twoim projekcie Dodaj pakiet (przez NuGet) MvvmLightLibs

2) dodać odniesienie do systemu.Okna.Interaktywność

3) w "widoku" XAML dodaj:

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) w ViewModel dodaj odpowiednią właściwość

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

P. S. Twoim zdaniem powinno być podane DataContext (XAML)

  <Window.DataContext>
    <vm:MainWindowViewModel/>
  </Window.DataContext>
To praca. Sam się nauczyłem.
 1
Author: Stepan Ivanenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-17 08:29:41