我正在开发 WPF 应用程序,并且正在使用 MVVM 模式。我使用 MVVMLight 来帮助我处理一些事件。我需要转发“Click”事件,以便我也可以传递参数,以便我可以确定发送事件的项目。如果我使用“命令”,我不能确定它是发送事件的选定项目 - 因为不需要选择该项目来右键单击它。
这是我用于显示“订单行”列表的代码。订单行有两种类型,一种是数据类型;“AccessoryOrderLine” - 我想添加一个上下文菜单。
我的问题是我无法访问 Window 的 DataContext。我已将 Window 中的根节点命名为“root”,并且正在尝试访问根的 DataContext,但这失败并出现以下错误:
System.Windows.Data 错误:4:找不到与引用“ElementName = root”绑定的源。BindingExpression:Path=DataContext.PackAccessory; 数据项=空;目标元素是“EventToCommand”(HashCode=5903270);目标属性是“命令”(类型“ICommand”)
<ListBox HorizontalContentAlignment="Stretch" Margin="10,0,10,10" DockPanel.Dock="Bottom" Grid.Row="1" ItemsSource="{Binding OrderLines, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type m:UnitOrderLine}">
<v:OrderLine />
</DataTemplate>
<DataTemplate DataType="{x:Type m:AccessoryOrderLine}">
<v:OrderLine>
<v:OrderLine.ContextMenu>
<ContextMenu>
<MenuItem Header="Pack 1" IsCheckable="False">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding ElementName=root, Path=DataContext.PackAccessory }" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</MenuItem>
</ContextMenu>
</v:OrderLine.ContextMenu>
</v:OrderLine>
</DataTemplate>
</ListBox.Resources>
</ListBox>
我也尝试过使用“TemplatedParent”,然后我可以访问我的“OrderLine”DataContext,但我无法更进一步回到我的“MainWindowModel”。
找到了解决我的问题的方法:)