Контекстное меню ICommand не запускается в моем приложении Windows Phone для mvvm

У меня есть следующее контекстное меню, определенное в представлении.

     <ListBox x:Name="lstSavedTracks"   ItemsSource="{Binding SavedMusicTracksDataSource}"          Grid.Row="1" Margin="0,10,0,0"  >
                        <ListBox.ItemTemplate >
                            <DataTemplate >

                                <StackPanel >
                                    <toolkit:ContextMenuService.ContextMenu>
                                        <toolkit:ContextMenu>
                                            <toolkit:MenuItem Header="view" CommandParameter="{Binding}"   ItemsSource="{Binding Path=PlayTrackCommand}"/>
                                            <toolkit:MenuItem Header="delete" CommandParameter="{Binding}"  Command="{Binding Path=DeleteTrackCommand}"/>
                                        </toolkit:ContextMenu>
                                    </toolkit:ContextMenuService.ContextMenu>

                                    <TextBlock Foreground="White" FontSize="20"  Text="{Binding TrackTitle}"  TextWrapping="Wrap"></TextBlock>
                                    <Line MinHeight="5"></Line>

                                </StackPanel>
                            </DataTemplate>

                        </ListBox.ItemTemplate>
                    </ListBox>

У меня ниже ViewModel установлен как datacontext для вышеупомянутого представления. ICommand работает для элементов управления, таких как кнопки, когда я использую команды привязки для событий щелчка. Но это не работает для моих команд контекстного меню.

  public System.Windows.Input.ICommand ViewTrackCommand
    {
        get
        {

            return new DelegateCommand((o) =>
            {

                Task.Factory.StartNew(() =>
                {
                    PlayTrack();
                });
            });
        }
   }


 public System.Windows.Input.ICommand DeleteTrackCommand
    {
        get
        {

            return new DelegateCommand((o) =>
            {

                Task.Factory.StartNew(() =>
                {
                    DeleteTrack();
                });
            });
        }
   }

Я попробовал аналогичную привязку icommand для события нажатия кнопок, и они работают нормально... но не работает контекстное меню. Есть ли что-то, что я здесь скучаю?

К вашему сведению: реализация Icommand, которая работает для кнопок..

public class DelegateCommand : System.Windows.Input.ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;

    public DelegateCommand(Action<object> execute)
        : this(execute, null)
    {
    }


    public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
    {
        _execute = execute;
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        if (_canExecute == null)
        {
            return true;
        }

        return _canExecute(parameter);
    }


    public void Execute(object parameter)
    {
        _execute(parameter);
    }

    public event EventHandler CanExecuteChanged;
}//end of class

1 ответ

Вам нужно указать четкие Path и Source of ViewModel следующим образом:

Command = "{Binding TestVM.DeleteTrackCommand, Source = {StaticResource Locator}}"

Надеюсь, это поможет вам.

Другие вопросы по тегам