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 в качестве работодателя

Я надеюсь, что это решит вашу проблему, потому что вы дали мне подсказку, как решить одну из моих проблем..

Другие вопросы по тегам