SL4: передача элемента в представлении в качестве параметра в команду в ViewModel
У нас есть пользовательский элемент управления с контекстным меню на одном из его дочерних элементов управления.
Команда привязана к RelayCommand в ViewModel.
Однако команда должна воздействовать на другого дочернего элемента управления в представлении.
Каков наилучший способ сделать это? Я попытался передать требуемый дочерний элемент в качестве параметра, но я думаю, что синтаксис неверен:
<Controls:ContextMenu >
<Controls:MenuItem Header="Center" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click" >
<GalaSoft_MvvmLight_Command:EventToCommand
Command="{Binding RecenterCommand}"
CommandParameter="{Binding ElementName=scrollViewer}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Controls:MenuItem>
</Controls:ContextMenu>
Команда:
RecenterCommand = new RelayCommand<ScrollViewer>(Recenter);
private void Recenter(ScrollViewer obj)
{
}
Когда я использую контекстное меню, вызывается Recenter(), но параметр obj имеет значение null.
Каков правильный синтаксис для атрибута ElementName в привязке CommandParameter?
ОБНОВЛЕНИЕ: я попытался изменить CommandParameter на:
CommandParameter="{Binding ElementName=LayoutRoot, Path=scrollViewer}"
... но все еще не работает.
Спасибо за любые идеи....
1 ответ
Я думаю, что вам нужно добавить PassEventArgsToCommand="True", поэтому код будет выглядеть так:
<GalaSoft_MvvmLight_Command:EventToCommand PassEventArgsToCommand="True":
Command="{Binding RecenterCommand}"
CommandParameter="{Binding ElementName=scrollViewer}" />
и если вы хотите сохранить данные в заданном коде (это код из одной из моих программ, используемых для пункта контекстного меню)
SelectedEmployer e = ((MenuItem) e).DataContext в качестве работодателя
Я надеюсь, что это решит вашу проблему, потому что вы дали мне подсказку, как решить одну из моих проблем..