2009-02-09 2 views
3

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

Теперь я хочу добавить кнопку DELETE на панели Master, чтобы удалить ее из главного списка элементов. Однако я не могу понять, как передать объект viewmodel текущего выбранного элемента в виде кнопки CommandParameter в код обработчика маршрутизируемых команд.

Заранее благодарим за любые указатели.

Майк

ответ

2

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

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

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

CommandParameter="{Binding Path=CurrentItem}" 

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

1

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

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

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

Надежда, что помогает,

Пол