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

3

37

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.

Guelph answered 3/5, 2011 at 11:12 Comment(2)
Here's a post that talks about all you need to know about EventToCommand from the creator of MVVMLight ;)Medicate
I've created a behavior that does not require MVVMLight. It does require System.Windows.Interactivity, but so does the accepted answer.Geodetic
M
84

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>
Melina answered 3/5, 2011 at 13:5 Comment(8)
How can this event be used by the view model then?Various
It converts the event to a command, in the example, a Command on the view model called, LoadedCommand will be invoked.Melina
Perfect, thanks. I matched up the command name with that of the command in my view model and it worked as expected.Various
Is the Mode=OneWay bit necessary? It seems to work fine without it.Johnnajohnnie
@Johnnajohnnie OneWay will update the target if the source changes, TwoWay will update the target if the source changes and also update the source if the target changes.Melina
@DerekBeattie But when would the target ever change?Johnnajohnnie
@Johnnajohnnie good point, I was thinking of a controls value being bound to a model property.Melina
I 'm trying to use this EventToCommand into a listview to control ItemTapped,.... but where should I put this <i:Interaction.Triggers> ????Thermograph
S
5

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

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
Selfaddressed answered 18/11, 2015 at 20:10 Comment(1)
How does this differ from https://mcmap.net/q/413800/-mvvm-light-adding-eventtocommand-in-xaml-without-blend-easier-way-or-snippet - ah I see, it was a late edit. This should really have been a comment on the other answer in that instanceAestivation
K
5

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.

Keyway answered 17/11, 2017 at 8:21 Comment(1)
I am traying to implement ItemTapped in a listview…… but I dont know where to put yoour code, can you helpme?Thermograph

© 2022 - 2024 — McMap. All rights reserved.