WPF data binding with RelativeSource and AncestorType

I am trying to get the binding code to work. Bascially I want to bind the IsEnabled property of a grid context menu item to the value of the selected row in the grid.

I am working with this:

            <my:DataGrid.ContextMenu>
                <ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}"> 
                    <MenuItem Header="Grant Access" IsEnabled="{Binding Connectable}"/>
                </ContextMenu>
            </my:DataGrid.ContextMenu>

But I want to do it this way, and it doesn't work. This is not a mistake, but simply does not disable the menu item. Any idea why?

            <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>
+3
source share
2 answers

Try using ElementName bindinginstead Ancestor binding. ContextMenunot part of the visual grid tree.

- edit -

, . ElementName (, ) ContextMenu. DataGrid. DataGrid , , . , .

, ?

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

Visual Studio, , , .

0

Source: https://habr.com/ru/post/1776656/


All Articles