我正在尝试使用一些绑定代码。基本上我想将网格上下文菜单元素的IsEnabled属性与网格中选定行的值绑定。
我有这个工作:
<my:DataGrid.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Grant Access" IsEnabled="{Binding Connectable}"/>
</ContextMenu>
</my:DataGrid.ContextMenu>
但是我想这样做,而且它不起作用。它没有错误,但只是不禁用菜单项。知道为什么吗?
<my:DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Grant Access" IsEnabled="{Binding Path=SelectedItem.Connectable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type my:DataGrid}}}"/>
</ContextMenu>
</my:DataGrid.ContextMenu>
答案 0 :(得分:2)
尝试使用ElementName binding
代替Ancestor binding
。 ContextMenu
不是Grid的可视化树的一部分。
- 编辑 -
啊,我错了。 ElementName绑定(下面给出的示例)也不适用于ContextMenu。它不是DataGrid可视化树的一部分。这就是为什么它无法看到DataGrid因此无法引用它。您将不得不使用第一种方法。你不想这样做的原因是什么?
<DataGrid.ContextMenu>
<ContextMenu DataContext="{Binding SelectedItem, ElementName=DataGrid1}">
<MenuItem Header="Grant Access"
IsEnabled="{Binding Connectable}" />
</ContextMenu>
</DataGrid.ContextMenu>
答案 1 :(得分:0)
如果在调试模式下查看Visual Studio中的输出窗口,您将获得绑定错误的详细信息 - 这可能会对您的问题有所了解。