我有一个上下文菜单,定义为资源并绑定到DataGrid中的SelectedItem,使用转换器获取当前项的显示名称,如“编辑”或“编辑”
它适用于第一个选定的项目,但不会在第二个项目上调用转换器(我有一个断点,只在第一次传递时被击中)。但是如果我在第二次传递时调用bound命令,它会调用新选择的实例。
我将此技术与其他ItemsControls一起使用,我无法发现任何错误。有什么想法吗?
干杯,
Berryl
资源&结合
<ContextMenu x:Key="ProjectActivityContextMenu" x:Shared="true">
...
<MenuItem Header="{Binding SelectedProjectActivity, Converter={StaticResource DeleteProjectConv}}" Command="{Binding DeleteCommand}" />
</ContextMenu>
接线
<DataGrid ...
SelectedItem="{Binding SelectedProjectActivity}"
IsSynchronizedWithCurrentItem="True"
ContextMenu="{DynamicResource ProjectActivityContextMenu}"
>
更新
如果我将其声明为网格的一部分,也会发生这种情况,例如:
<DataGrid.ContextMenu>
<ContextMenu >
....
<MenuItem Header="{Binding SelectedProjectActivity, Converter={StaticResource DeleteProjectConv}}" Command="{Binding DeleteCommand}" />
</ContextMenu>
</DataGrid.ContextMenu>
答案 0 :(得分:0)
我认为您所看到的只是将ContextMenu定义为资源的结果。在您实际打开菜单之前,它没有DataContext来应用绑定,因此不会调用转换器。即使您在不打开菜单的情况下更改选择几次,也应保持此状态。右键单击并打开菜单后,将应用DataContext,并且可以解析绑定。