2010-11-23 78 views
0

在这个例子中我的按钮的IsEnabled属性绑定到所选行的同一控制属性“本地”电网的财产,它工作得很好:WPF数据绑定到

 <Button DockPanel.Dock="Bottom" Width="100" Height="100" IsEnabled="{Binding ElementName=dataGridRestore , Path=SelectedItem.Local}"></Button> 

     <my:DataGrid x:Name="dataGridRestore" 
        ItemsSource="{Binding}" 
        > 

      <my:DataGrid.ContextMenu> 
       <ContextMenu Name="restoreCntextMenu"> 
        <MenuItem Header="Open" /> 
       </ContextMenu> 
      </my:DataGrid.ContextMenu> 

      <my:DataGridCheckBoxColumn Header="Local" Binding="{Binding Local}" /> 
     </my:DataGrid> 

现在,当我将按钮从网格外部移动到网格的上下文菜单中,我的绑定不起作用。为什么是这个,我该如何解决它?

 <my:DataGrid x:Name="dataGridRestore" 
        ItemsSource="{Binding}" 
        > 

      <my:DataGrid.ContextMenu> 
       <ContextMenu Name="restoreCntextMenu"> 
        <MenuItem Header="Open" /> 
        <Button Width="100" Height="100" IsEnabled="{Binding ElementName=dataGridRestore , Path=SelectedItem.Local}"></Button> 
       </ContextMenu> 
      </my:DataGrid.ContextMenu> 

      <my:DataGridCheckBoxColumn Header="Local" Binding="{Binding Local}" /> 
     </my:DataGrid> 

回答

2

使用此代码:

<ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}"> 
    <Button IsEnabled="{Binding Local}"/> 
</ContextMenu> 

我DataGridRows的文本菜单测试,它工作得很好。

0

如何使用RelativeSource属性而不是ElementName?

现在不能测试,但这样的事情:

<Button Width="100" Height="100" IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DataGrid}},Path=SelectedItem.Local}"></Button>