How do you send in the LayoutRoot into a RelayCommand via a EventToCommand?

Posted by user298145 on Stack Overflow See other posts from Stack Overflow or by user298145
Published on 2010-05-21T02:06:49Z Indexed on 2010/05/21 2:10 UTC
Read the original article Hit count: 288

Filed under:
|

Grid example with the trigger:

<Grid x:Name="LayoutRoot" DataContext="{Binding ProjectGrid, Source={StaticResource Locator}}">
<i:Interaction.Triggers>
  <i:EventTrigger EventName="Loaded">
    <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding LoadedCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
  </i:EventTrigger>
</i:Interaction.Triggers>

In my ViewModel I set the LoadedCommand like this:

public RelayCommand<RoutedEventArgs> LoadedCommand {get;private set;}

And in the ViewModel initializer I have this:

public ProjectGridViewModel()
{
  LoadedCommand = new RelayCommand<RoutedEventArgs>(e => 
    {
      this.DoLoaded(e);
    }
  );
}

Then, in my DoLoaded I'm trying to do this:

Grid _projectGrid = null;
public void DoLoaded(RoutedEventArgs e)
{
  _projectGrid = e.OriginalSource as Grid;
}

You can see I'm trying to get rid of my Loaded="" in my Grid in my view, and do a RelayCommand instead. The issue is the OriginalSource brings back nothing. My loaded event is running nice this way, but I need to get the Grid in via the RoutedEventArgs it seems.

I tried passing in the Grid in the EventCommand with CommandParameter="{Binding ElementName=LayoutRoot}", but this just crashes VS2010 when hitting F5 and running the project.

Any ideas? Or a better way to do this? I had the Loaded event run in the views C# then call the ViewModel in the Views code-behind, but I'd like to do a nicer binding. Talking to the ViewMode in the Views code-behind feels like a hack.

© Stack Overflow or respective owner

Related posts about mvvm-light

Related posts about relaycommand