我们在其中一个子控件上有一个带有上下文菜单的用户控件 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}"
......但仍然无效。
感谢任何见解......
答案 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
我希望这会解决你的问题,因为你给了我一个如何解决我的问题的提示..