2013-04-03 3 views
0

Я использую MVVM, и я хочу позвонить Command, когда я нажму правой кнопкой мыши на свой ListView. Я сделал много поисков, но моя проблема не решена.Невозможно связать просмотр списка с шаблоном данных

Я использую этот код XAML код

<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> 

Сообщение об ошибке:

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')

+0

где объявлен 'AddToPlaylistCommand'? – Default

+0

Pls покажет нам реализацию 'PlayList'. – DHN

+0

Это в моей ViewModel Gims

ответ

3

использовать относительный источник, как это (предположим, что элемент управления является окном)

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

У меня есть это: System.Windows.Data Error: 40: Ошибка пути BindingExpression: свойство AddToPlaylistCommand не найдено в 'object' '' MainWindow '(Name =' mainWindow ')'. BindingExpression: Path = AddToPlaylistCommand; DataItem = 'MainWindow' (Name = 'mainWindow'); целевым элементом является «MenuItem» (Name = ''); target свойство «Command» (тип «ICommand») – Gims

+0

Как он прокомментировал это, он находится в своем datacontext, а не в его Окне. – Default

+0

Да, это в моем dataContext, и я не знаю, как я могу это использовать. – Gims

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

Пожалуйста, внесите свой ответ. – joce

+0

Что именно не понятно? –

2
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.AddToPlaylistCommand}" 
Смежные вопросы