Gims
Gims

Reputation: 65

Cannot bind List View with Data Template

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

Answers (3)

user1064519
user1064519

Reputation: 2190

Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.AddToPlaylistCommand}"

Upvotes: 2

Vyacheslav Volkov
Vyacheslav Volkov

Reputation: 4742

Command="{Binding Path=DataContext.AddToPlaylistCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"

Upvotes: 0

iltzortz
iltzortz

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

Related Questions