Reputation: 65
I'm using MVVM
and I want to call a Command
when I right click on my ListView
. I made a lot of searches but my problem is not solved.
I use this XAML code
<ListView ItemsSource="{Binding LibraryList}"
x:Name="MediaList"
Visibility="{Binding MediaListVisibility}"
Margin="149,18,-1,0"
BorderBrush="#FF8BCD7F"
BorderThickness="0"
Background="White">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding ChooseMediaCommand}"
CommandParameter="{Binding SelectedValue, ElementName=MediaList}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" Width="300" />
<GridViewColumn DisplayMemberBinding="{Binding Time}" Header="Time" Width="70" />
<GridViewColumn DisplayMemberBinding="{Binding Artist}" Header="Artist" Width="120" />
<GridViewColumn DisplayMemberBinding="{Binding Album}" Header="Album" Width="120" />
<GridViewColumn DisplayMemberBinding="{Binding Year}" Header="Year" Width="80" />
</GridView>
</ListView.View>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Add to playlist" ItemsSource="{Binding PlaylistsList}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Name}"
Command="{Binding AddToPlaylistCommand}"
CommandParameter="{Binding Name}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
<MenuItem Header="Remove"/>
</ContextMenu>
</ListView.ContextMenu>
Error Message :
System.Windows.Data Error: 40 : BindingExpression path error: 'AddToPlaylistCommand' property not found on 'object' ''Playlist' (HashCode=16901761)'. BindingExpression:Path=AddToPlaylistCommand; DataItem='Playlist' (HashCode=16901761); target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
Upvotes: 0
Views: 327
Reputation: 2190
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.AddToPlaylistCommand}"
Upvotes: 2
Reputation: 4742
Command="{Binding Path=DataContext.AddToPlaylistCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
Upvotes: 0
Reputation: 2422
use relative source like this (assume your control is a window)
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=AddToPlaylistCommand}"
Upvotes: 3