【发布时间】:2010-08-18 21:45:37
【问题描述】:
我有一个上下文菜单,它被定义为资源并绑定到 DataGrid 中的 SelectedItem,使用转换器获取当前项目的显示名称,如“编辑”或“编辑”
它适用于第一个选定的项目,但不会在第二个调用转换器(我有一个断点,只有在第一次通过时才会被击中)。但是,如果我在第二遍调用绑定命令,它应该调用新选择的实例。
我将此技术与其他 ItemsControls 一起使用,但我没有发现任何问题。有什么想法吗?
干杯,
浆果
资源和绑定
<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>
【问题讨论】:
-
只是检查一下,“SelectedProjectActivity”属性的 PropertyChanged 事件是否被正确引发?另外,DeleteCommand 是什么类型的命令?
-
@puppet。好主意,我没有在 SelectedProject 的设置器中提出我自己的 propertyNotification,因为它是由框架同步的。 At least thats how I understand it and I see the value change when a different item is selected
-
@puppet。该命令是 Josh Smith 的 RelayCommand 的变体,或者他们现在所说的任何东西。我也怀疑 CanExecute 委托(只要 SelecedProject != null 就是如此),但它看起来很好,并且命令在正确的 SelectedProject 上正确执行。也许我需要 UpdateTrigger 设置?我很困惑
-
如果您想要更新使用它的其他绑定,您仍然需要在 SelectedProjectActivity 上发送 PropertyChanged 通知。我假设您正在谈论的同步是通过设置 IsSynchronizedWithCurrentItem="True" 激活的 ICollectionView.CurrentItem。这对您在此示例中使用的任何内容都没有影响。
-
@约翰。你是对的,在设置上使用 INPC 修复它。干杯
标签: wpf silverlight data-binding