2010-11-24 62 views
3

我想获得一些绑定代码工作。基本上,我想将网格上下文菜单中元素的IsEnabled属性与网格中选定行的值绑定。WPF与RelativeSource和祖先类型的数据绑定

我有这个工作:

  <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> 

回答

2

尝试使用ElementName binding而不是Ancestor bindingContextMenu不是网格可视化树的一部分。

- 编辑 -

啊,我错了。 ElementName绑定(下面给出的示例)也不适用于ContextMenu。它不是DataGrid的可视化树的一部分。这就是为什么它看不到DataGrid,因此无法引用它。你将不得不使用第一种方法。

任何你不想这样做的原因吗?

  <DataGrid.ContextMenu> 
       <ContextMenu DataContext="{Binding SelectedItem, ElementName=DataGrid1}"> 
        <MenuItem Header="Grant Access" 
           IsEnabled="{Binding Connectable}" /> 
       </ContextMenu> 
      </DataGrid.ContextMenu> 
+0

嗨!你知道这样做的语法吗? – Bob 2010-11-24 10:49:31

0

如果您在调试模式下查看Visual Studio中的输出窗口,将会看到绑定错误的详细信息 - 这可能会对您的问题提供一些信息。

+0

谢谢院长,好贴士 – Bob 2010-11-24 10:50:44