Привязать свойство ContextMenuItem к DataGrid или другому свойству элемента - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь привязать свойство ContextMenuItem к свойству DataGrid в виде потока:

<DataGrid Name="DG_Data" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="COL1"/>
                <DataGridTextColumn Header="COL2"/>
                <DataGridTextColumn Header="COL3"/>
                <DataGridTextColumn Header="COL4"/>
            </DataGrid.Columns>
</DataGrid>

<Button Name="BTN_OpenContext" Content="CLICK TO OPEN">
        <Button.ContextMenu>
            <ContextMenu Name="CM_ContextMenu">
                <MenuItem Header="{Binding ElementName=DG_Data,Path=Columns.Count,FallbackValue=BindingFailed}" />
            </ContextMenu>
        </Button.ContextMenu>
</Button>

Я также пытался использовать другой способ с RelativeSource

<MenuItem Header="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=2,AncestorType=FrameworkElement}, FallbackValue=BindingFailed}" />

Я только что смог привязаться к родителю (ContextMenu).

Спасибо

1 Ответ

1 голос
/ 14 марта 2019

ContextMenu не может привязаться к DataGrid с помощью ElementName, но не может привязаться к свойству родительского ContextMenu PlacementTarget (то есть Button).

Таким образом, вы можете привязать свойство Button Tag к DataGrid, а затем привязать к свойству Tag из MenuItem:

<Button Name="BTN_OpenContext" Content="CLICK TO OPEN"
        Tag="{Binding ElementName=DG_Data}">
    <Button.ContextMenu>
        <ContextMenu Name="CM_ContextMenu">
            <MenuItem Header="{Binding Path=PlacementTarget.Tag.Columns.Count, 
                    RelativeSource={RelativeSource AncestorType=ContextMenu}, FallbackValue=BindingFailed}" />
        </ContextMenu>
    </Button.ContextMenu>
</Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...