Как получить DataRow из события DataRow.ContextMenu - PullRequest
1 голос
/ 23 мая 2019

Как связать DataRow со свойством Tag свойства ContextMenu.MenuItem, связанного с этой строкой? Вот что у меня есть:

<DataGrid.Resources>
    <ContextMenu x:Key="RowContextMenu">
        <ContextMenu.Items>
            <!--This line doesnot work-->
            <MenuItem Header="GoToElement" Click="Click_GoToElement" Tag="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=Row.Header}"/>
        </ContextMenu.Items>
    </ContextMenu>
</DataGrid.Resources>

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
        <Setter Property="ContextMenu" Value="{StaticResource RowContextMenu}" />
    </Style>
</DataGrid.RowStyle>

Тогда click-event выглядит следующим образом. Я получаю сообщение об ошибке: ссылка на объект не установлена ​​на экземпляр объекта

private void Click_GoToElement(object sender, RoutedEventArgs e)
{
    try
    {
        var row = ((System.Windows.Controls.MenuItem)sender).Tag;
        MessageBox.Show(row.ToString());
    }
    catch (Exception ex) { MessageBox.Show(ex.Message + "\n" + ex.StackTrace); }
}

1 Ответ

0 голосов
/ 23 мая 2019

Привязка к PlacementTarget родительского ContextMenu:

<MenuItem Header="GoToElement"
          Click="Click_GoToElement"
          Tag="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.Header}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...