首页 > 解决方案 > 如何从其菜单项具有不同数据上下文的代码中找到上下文菜单的父数据上下文?

问题描述

有没有办法通过单击 menuitem itemsource 具有不同数据上下文的 menuitem 来获取项目控件的当前实例?

<ItemsControl x:Name="itemscontrol" ItemsSource="{Binding ProcessModels}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border x:Name="ProcessBorder" Height="40" BorderThickness="1">
                <Border.Style>
                    <Style TargetType="Border">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="BorderBrush" Value="White"></Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
                <Grid Background="Transparent" x:Name="ProcessGrid">
                    <Grid.ContextMenu>
                        <ContextMenu x:Name="CategoryMenu">
                            <MenuItem Header="Add To" ItemsSource="{Binding DataContext.ProcessTemplatesList,Source={x:Reference itemscontrol}}">
                                <MenuItem.Icon>
                                    <Image Source="Assets/Images/add.png" RenderOptions.BitmapScalingMode="HighQuality" Height="15"></Image>
                                </MenuItem.Icon>
                                <MenuItem.ItemTemplate>
                                    <DataTemplate>
                                        <MenuItem Header="{Binding Category}" Click="MenuItem_Click"></MenuItem>
                                    </DataTemplate>
                                </MenuItem.ItemTemplate>
                            </MenuItem>
                            <MenuItem Header="Remove"/>
                        </ContextMenu>
                    </Grid.ContextMenu>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="30"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Image Grid.Column="0" Source="{Binding Path}" RenderOptions.BitmapScalingMode="HighQuality"/>
                    <TextBlock Text="{Binding Name}" Grid.Column="1" Padding="0" VerticalAlignment="Center" Foreground="White" Margin="10,0,0,0"/>
                </Grid>
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

在从上下文菜单子菜单项中单击一个类别时,我需要从代码隐藏中获取进程模型的当前实例。

我试过的是

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    var onAdd = (MenuItem)sender;
    var processModel = (ProcessModel)onAdd.DataContext;
}

我收到一个错误

无法将“ProcessManager.Models.ProcessTemplate”类型的对象转换为“ProcessManager.Models.ProcessModel”类型。

我需要从 ProcessModel 中获取单击的项目。

标签: wpfmvvmdata-bindingdatacontextitemsource

解决方案


推荐阅读