Here's a standard ListBox control. The .DataContext of our main user control is bound to an instance of our ViewModel class. The ViewModel exposes a public command MoveCustomerCommand(Customer record). The MoveCustomerCommand would be configured to use a DelegateCommand not shown here. The ViewModel also exposes an ObservableCollection<Customer> called Customers that is used as the ListBox.ItemSource value. In the InvokeCommandAction tag, we set the path to use the DataContext of our ListBox control named "CustomerListControl". The CommandParameter="{Binding}" sets the value to the current record in the collection/DataTemplate. <ListBox Name="CustomerListControl" ItemsSource="{Binding Path=Customers,Mode=TwoWay}" > <ListBox.ItemTemplate> <DataTemplate> <HyperlinkButton> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:InvokeCommandAction Command="{Binding Path=DataContext.MoveCustomerCommand, ElementName=CustomerListControl}" CommandParameter="{Binding}"/> </i:EventTrigger> </i:Interaction.Triggers> <HyperlinkButton.Content> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Path=FirstName}" /> <TextBlock Text="{Binding Path=LastName}" /> </StackPanel> </HyperlinkButton.Content> </HyperlinkButton> </DataTemplate> </ListBox.ItemTemplate> </ListBox> For more information on the DelegateCommand, here is a good example: http://msmvps.com/blogs/deborahk/archive/2011/02/12/silverlight-simple-mvvm-commanding.aspx