我遇到了以下问题。我的xaml代码中的情况如下:
<ListView ItemsSource="{Binding ListViewItems}">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<Label Content="Test">
<Label.ContextMenu>
<ContextMenu ItemsSource="{Binding MenuItems}">
</ContextMenu>
</Label.ContextMenu>
</Label>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseUp">
<i:InvokeCommandAction Command="{Binding LabelMouseUpCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
单击标签后,没有显示上下文菜单且触发器也不起作用,因此未输入LabelMouseUpCommand方法。我担心listview会处理点击本身,而不会将其传递给嵌入式控件。
有没有办法将它传递给控件。将来我想在itemtemplate中添加几个控件,每个人都拥有不同的上下文菜单。
答案 0 :(得分:0)
我找到了这个问题的答案stackoverflow article
作者解释说,contextmenu与listview不在同一个可视树中。因此,我的初始绑定无法工作,因为在可视树中找不到源。
此外,Sinatr完全正确,触发器最初是为listview定义的,而不是标签。
这是我的工作代码:
<ListView ItemsSource="{Binding ListViewItems}" x:Name="listViewMain">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<Label Content="Test">
<Label.ContextMenu>
<ContextMenu ItemsSource="{Binding DataContext.MenuItems, Source={x:Reference listViewMain}}">
</ContextMenu>
</Label.ContextMenu>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseUp">
<i:InvokeCommandAction Command="{Binding DataContext.LabelMouseUpCommand, Source={x:Reference listViewMain}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Label>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>