DataBinding Oddity - 在第二次传递时未调用转换器

时间:2010-08-18 21:45:37

标签: wpf silverlight data-binding

我有一个上下文菜单,定义为资源并绑定到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>

1 个答案:

答案 0 :(得分:0)

我认为您所看到的只是将ContextMenu定义为资源的结果。在您实际打开菜单之前,它没有DataContext来应用绑定,因此不会调用转换器。即使您在不打开菜单的情况下更改选择几次,也应保持此状态。右键单击并打开菜单后,将应用DataContext,并且可以解析绑定。