Here's a bit of redundancy:
Option 1: Store CommandParameter:
private Item _selectedItem; public Item SelectedItem { get { return _selectedItem; } set { _selectedItem = value; NotifyPropertyChanged("SelectedTrends"); } } private RelayCommand _selectedItemCommand; public RelayCommand SelectedItemCommand { get { return this._selectedItemCommand ?? (this._selectedItemCommand= new RelayCommand(() => { MessageDialog messagedialog = new MessageDialog(selectedItem.Name,"Test"); messagedialog.ShowAsync(); })); } }
and xaml:
<ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding ItemList}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" Padding="130,0,0,0"> <Triggers:Interactions.Triggers> <Triggers:EventTrigger EventName="SelectionChanged"> <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" /> </Triggers:EventTrigger> </Triggers:Interactions.Triggers> </ListView>
Option 2: Replace the SelectedItem binding:
<ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding ItemList}" Padding="130,0,0,0"> <Triggers:Interactions.Triggers> <Triggers:EventTrigger EventName="SelectionChanged"> <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem, ElementName=lstItem}"/> </Triggers:EventTrigger> </Triggers:Interactions.Triggers> </ListView>
and remove the SelectedItem property from ViewModel if you don't need it for something else.
EDIT
If you want to handle the click event on an element, you need to move the behavior to the parent ItemTemplate DataTemplate, such as the grid in which the controls are placed. This allows you to handle the click event on an element.
source share