【发布时间】:2012-06-29 16:23:56
【问题描述】:
我正在开发一个 WPF 应用程序并且我正在使用 MVVM 模式。我使用 MVVMLight 来帮助我处理一些事件。我需要转发“Click”事件,以便我也可以传递参数,以便我可以确定发送事件的项目。如果我使用“命令”,我无法确定发送事件的是所选项目 - 因为不需要选择该项目即可右键单击它。
这是我用于显示“订单行”列表的代码。订单行有两种类型,一种是数据类型; "AccessoryOrderLine" - 我想添加一个上下文菜单。
我的问题是我无法访问 Window 的 DataContext。我已将 Window 中的根节点命名为“root”,并尝试访问根的 DataContext,但这失败并出现以下错误:
System.Windows.Data 错误:4:找不到绑定源 参考“元素名=根”。 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”。
找到解决我问题的方法:)
【问题讨论】:
标签: wpf xaml mvvm datacontext