Martin
Martin

Reputation: 24308

MVVM Light: Adding EventToCommand in XAML without Blend, easier way or snippet?

Can anyone tell me what the actual syntax is for EventToCommand class. From what I believe is that EventToCommand class works with Silverlight / WPF and WP7, hence I think its a better choice to go down.

From what I believe, I can add any click event and get it forced into my ViewModel, but I am having an issue in finding the best way to do this.

I know you can add it without Blend, but are there snippets available?

Or is there an easier way to add it via VS 2010? Any help or if anyone knows of a good tutorial on this would be great.

Upvotes: 37

Views: 58884

Answers (3)

Stepagrus
Stepagrus

Reputation: 1559

0) if you dont't know WPF and MVVM, then read Josh Smith article about WPF and MVVM pattern https://msdn.microsoft.com/en-us/magazine/dd419663.aspx

1) In your project add package (through NuGet) MvvmLightLibs

2) add reference to System.Windows.Interactivity

3) In "View" XAML add:

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) In ViewModel add necessary property

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

P.S. In your View should be specified DataContext (XAML)

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

It is work. I myself just learned.

Upvotes: 5

Derek Beattie
Derek Beattie

Reputation: 9478

Suppose you use .NetFramework4:

First add namespace:

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

Syntax for the Loaded event.

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

Upvotes: 84

Michael Shaffer
Michael Shaffer

Reputation: 374

I updated my project and it looks like they moved the command to:

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

Upvotes: 5

Related Questions