SL4:将View中的元素作为参数传递给ViewModel中的Command

时间:2011-11-08 19:50:00

标签: silverlight-4.0 mvvm-light relaycommand

我们在其中一个子控件上有一个带有上下文菜单的用户控件 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}"

......但仍然无效。

感谢任何见解......

1 个答案:

答案 0 :(得分:0)

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

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

如果你想在codebehind put中导入数据(这是我用于上下文菜单项的一个程序的代码)

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

我希望这会解决你的问题,因为你给了我一个如何解决我的问题的提示..