SL4: передача элемента в представлении в качестве параметра в команду в ViewModel - PullRequest
0 голосов
/ 08 ноября 2011

У нас есть пользовательский элемент управления с контекстным меню на одном из его дочерних элементов управления.
Команда привязана к 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 Ответ

0 голосов
/ 09 ноября 2011

Я думаю, что вам нужно добавить PassEventArgsToCommand = "True", поэтому код будет выглядеть так:

<GalaSoft_MvvmLight_Command:EventToCommand  PassEventArgsToCommand="True":
                                    Command="{Binding RecenterCommand}" 
                                    CommandParameter="{Binding ElementName=scrollViewer}" />

и если вы хотите сохранить данные в коде позади (это код одной из моих программ, используемых для пункта контекстного меню)

SelectedEmployer e = ((MenuItem) e) .DataContext as Employer

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...