0

我们在其子控件之一上有一个带有上下文菜单的用户控件。
Command 绑定到 ViewModel 中的 RelayCommand。
但是,该命令必须作用于视图中的另一个子控件。
做这个的最好方式是什么?我尝试将所需的子控件作为参数传递,但我认为语法不正确:

                        <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 参数为空。
CommandParameter 绑定中 ElementName 属性的正确语法是什么?

更新:我尝试将 CommandParameter 更改为:

CommandParameter="{Binding ElementName=LayoutRoot, Path=scrollViewer}"

...但仍然无法正常工作。

感谢您的任何见解....

4

1 回答 1

0

我认为您需要添加 PassEventArgsToCommand="True" 所以,代码将是这样的:

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

并且如果您想将数据隐藏在代码隐藏中(这是我用于上下文菜单项的程序之一的代码)

SelectedEmployer e = ((MenuItem)e).DataContext 作为雇主

我希望这能解决你的问题,因为你给了我一个提示,告诉我如何解决我的一个问题。

于 2011-11-09T18:14:06.577 回答