2010-11-24 95 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