2010-11-23 6 views
0

Dans cet exemple, la propriété IsEnabled de mon bouton est lié aux lignes sélectionnées propriété « locale » de la grille et il fonctionne très bien:WPF databinding à une propriété dans le même contrôle

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

Maintenant, quand je déplacez le bouton de l'extérieur de ma grille à l'intérieur du menu contextuel de la grille ma liaison ne fonctionne pas. Pourquoi est-ce et comment puis-je le réparer?

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

Répondre

2

Utilisez ce code:

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

Je l'ai testé avec ContextMenu de DataGridRows et il a bien fonctionné.

0

Qu'en est-il de l'utilisation de l'attribut RelativeSource au lieu de ElementName?

ne peut pas le tester en ce moment, mais quelque chose comme ceci:

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