wpf - 如何从其菜单项具有不同数据上下文的代码中找到上下文菜单的父数据上下文?
问题描述
有没有办法通过单击 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 中获取单击的项目。
解决方案
推荐阅读
- java - 在 JSP 的同一页面中将数据(对象)从 Servlet 发送到 BootStrap Modal
- mysql - 无法连接到公共 RDS 数据库
- java - Cucumber Selenium - Java - PageFactory:步骤定义:java.lang.NullPointerException
- python - 使用 python-obd 连接和查询汽车的问题
- java - 如何使用 ListVersionsRequest、JAVA 从 S3 获取确切文件的信息?
- php - 我可以更改以编程方式应用 WooCommerce 优惠券的顺序吗?
- php - 如何将参数传递给 laravel elequent 模型的事件观察者
- swift - 数组前缀(while :) 为相同的逻辑循环不同的次数。(无法理解)
- node.js - 确保 PubSub 批处理请求在 Google Cloud Run Node App 中发送
- python - 数据框分组到新数据框