WPF: Как привязать команду к ListBoxItem с помощью MVVM?

Я только начал изучать MVVM. Я создал приложение с нуля, следуя этому учебному пособию по MVVM (я настоятельно рекомендую его всем начинающим MVVM). По сути, до сих пор я создал пару текстовых полей, в которые пользователь добавляет свои данные, кнопку для сохранения этих данных, которая впоследствии заполняет ListBox всеми сделанными записями.

Вот где я застрял: я хочу иметь возможность дважды щелкнуть ListBoxItem и запустить команду, которую я создал и добавил в свою ViewModel. Я не знаю, как закончить сторону XAML, т.е. Я не знаю, как привязать эту команду к ListBox (Item).

Вот XAML:

...

...

Вот ViewModel:

public class MainWindowViewModel : DependencyObject
{
    ...
    public IEntriesProvider Entries
    {
        get { return entries; }
    }

    private IEntriesProvider entries;
    public OpenEntryCommand OpenEntryCmd { get; set; }

    public MainWindowViewModel(IEntriesProvider source)
    {
        this.entries = source;
        ...
        this.OpenEntryCmd = new OpenEntryCommand(this);
    }
    ...
}

И, наконец, вот OpenEntryCommand, которую я хочу выполнить, когда пользователь дважды щелкнет элемент в EntriesListBox:

public class OpenEntryCommand : ICommand
{
    private MainWindowViewModel viewModel;

    public OpenEntryCommand(MainWindowViewModel viewModel)
    {
        this.viewModel = viewModel;
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    public bool CanExecute(object parameter)
    {
        return parameter is Entry;
    }

    public void Execute(object parameter)
    {
        string messageFormat = "Subject: {0}\nStart: {1}\nEnd: {2}";
        Entry entry = parameter as Entry;
        string message = string.Format(messageFormat, 
                                       entry.Subject, 
                                       entry.StartDate.ToShortDateString(), 
                                       entry.EndDate.ToShortDateString());

        MessageBox.Show(message, "Appointment");
    }
}

Пожалуйста, помогите, я буду признателен .

26
задан g t 29 August 2014 в 08:08
поделиться