Как передать определенный объект модели представления в CommandParam кнопки? - PullRequest
3 голосов
/ 09 февраля 2009

У меня есть простая программа WPF, использующая шаблон UI Master-Detail, где Detail показывает текущий выбранный элемент коллекции на главной панели. Я использую MVVM, и каждая страница XAML поддерживается объектом ViewModel, который задан как DataContext.

Теперь я хочу добавить кнопку УДАЛИТЬ на главной панели, чтобы удалить ее из основного списка элементов. Однако я не могу понять, как передать объект viewmodel выбранного в данный момент элемента в виде кнопки CommandParameter в код обработчика перенаправленной команды.

Заранее спасибо за любые указатели.

Mike

Ответы [ 2 ]

2 голосов
/ 10 февраля 2009

Что-то похожее на то, что показал Пол, - это то, где ваша модель представления узнает, какой элемент выбран в данный момент. * 1001 Т.е. *

public class MyVM
{
 public ObservableCollection<MyObject> MyCollection { get; set; }
 public MyObject CurrentItem { get; set; }
}

Ваш XAML может быть просто

CommandParameter="{Binding Path=CurrentItem}"

Пока ваша мастер-панель устанавливает свойство CurrentItem при его выборе, ваша команда может просто установить CurrentItem в качестве параметра команды.

1 голос
/ 09 февраля 2009

Одним из вариантов будет создание каждой команды со ссылкой на модель представления и создание свойства модели представления, которое привязано к текущему выбранному элементу. Таким образом, вам не нужно передавать выбранный элемент в качестве параметра - команда может извлечь его из виртуальной машины. Если это не подходит для ваших обстоятельств, вы можете передать выбранный предмет примерно так:

<Button Content="Delete"
                Command="{Binding DeleteCommand}"
                CommandParameter="{Binding ElementName=listBox_, Path=SelectedValue}" />

Где listBox_ - элемент управления, производный от Selector.

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

Пол

...