Каков синтаксис подключения EventToCommand mvvm-light к позиции в шаблоне данных?Для действия над основной моделью синтаксис, подобный приведенному ниже, работает нормально, однако, если я выполняю операцию над элементом строки в шаблоне данных, привязка не работает, и мне нужно определить конкретную позицию для работы,
Прежде чем пытаться подключить событие к команде, я щелкнул элемент строки в обработчике события в коде XAML;обработчик извлек объект данных элемента строки из аргументов события, а затем передал объект данных элемента строки в метод через DataContext в модель представления, и это работало нормально, но я хотел оставаться последовательным при обработке в приложении.
Ошибка времени выполнения в выходных данных: System.Windows.Data Ошибка: ошибка пути BindingExpression: свойство 'EditLineCommand' не найдено в 'Model.LineItem'.BindingExpression: Path = 'EditLineCommand' DataItem = 'Model.LineItem';целевым элементом является System.Windows.Controls.Button (Name = 'EditRowButton');Свойство target - 'DependencyPropertyListener39' (тип 'System.Object') ..
XAML main layout:
<!-- Line Items -->
<ListBox ItemTemplate="{StaticResource LineItemTemplate}" ItemsSource="{Binding Model.LineItems}"/>
XAML data template:
<DataTemplate x:Key="LineItemTemplate">
<Button>
<Image Source="..." />
<Custom:Interaction.Triggers>
<Custom:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding EditLineCommand, Mode=OneWay}" />
</Custom:EventTrigger>
</Custom:Interaction.Triggers>
</Button>
</DataTemplate>
Обновление - мне кажется, я почти на месте, ответ @Claus дал мне большую частьпутем решения проблемы связывания команд.Чтобы определить конкретную линию для работы, я связываюсь с LineNumber объекта LineItem, а затем извлекаю этот параметр из команды реле:
<GalaSoft_MvvmLight_Command:EventToCommand
Command="{Binding DataContext.DeleteLineCommand, ElementName=DetailPage}"
CommandParameter="{Binding LineNumber}"
PassEventArgsToCommand="True" />
...
public RelayCommand<int> DeleteLineCommand { get; private set; }
...
DeleteLineCommand = new RelayCommand<int>((ln) => { DeleteLineItem(ln); });
Это работоспособное решение, но есть ли способ привязки к полному LineItem, а не просто к члену?