Caliburn Micro中的WPF上下文菜单
我试图在ListBox ItemTemplate中获取上下文菜单,以调用父视图模型上的方法,并将单击的项作为参数传递进来。我对项目模板中的其他按钮也有这样的功能,但是对于上下文菜单,它似乎失败了 我有以下xaml(为清晰起见缩写):Caliburn Micro中的WPF上下文菜单,wpf,contextmenu,caliburn.micro,caliburn,Wpf,Contextmenu,Caliburn.micro,Caliburn,我试图在ListBox ItemTemplate中获取上下文菜单,以调用父视图模型上的方法,并将单击的项作为参数传递进来。我对项目模板中的其他按钮也有这样的功能,但是对于上下文菜单,它似乎失败了 我有以下xaml(为清晰起见缩写): ... .. 文本。。 我觉得这与视觉树不同有关,因此Caliburn无法可靠地解析该方法。我确信这是一个常见的问题,我也尝试了一些在网上找到的东西,但似乎没有任何效果 有什么想法吗???使用我在上找到的信息,我修改了您的XAML,使其看起来像这样: <
...
.. 文本。。
我觉得这与视觉树不同有关,因此Caliburn无法可靠地解析该方法。我确信这是一个常见的问题,我也尝试了一些在网上找到的东西,但似乎没有任何效果
有什么想法吗???使用我在上找到的信息,我修改了您的XAML,使其看起来像这样:
<Grid Background="White" HorizontalAlignment="Stretch" Height="200" Name="GridLayout">
<ListBox x:Name="ListBoxItems">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Tag="{Binding DataContext, ElementName=GridLayout}">
<Grid.ContextMenu>
<ContextMenu Name="cm" cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Open"
cal:Message.Attach="Open($dataContext)">
</MenuItem>
</ContextMenu>
</Grid.ContextMenu>
<TextBlock VerticalAlignment="Center" >
.. text..
</TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
.. 文本。。
和我的视图模型:
public List<string> ListBoxItems { get; set; }
public ShellViewModel()
{
ListBoxItems = new List<string> {"One", "Two", "Three"};
}
public void Open(object source)
{
MessageBox.Show((string) source);
}
public List ListBoxItems{get;set;}
公共ShellViewModel()
{
ListBoxItems=新列表{“一”、“二”、“三”};
}
公共void Open(对象源)
{
显示((字符串)源代码);
}
已使用列表框中的相应字符串成功调用Open。添加到Jason的答案中,如果要使用与控件相同的数据上下文,则只需绑定
DataContext
而不是标记
$source
触发要删除的ActionMessage的实际框架元素
您可以在此处查看有关
$source
约定的更多信息:我想知道为什么不接受此约定。帮了我很多,谢谢。
public List<string> ListBoxItems { get; set; }
public ShellViewModel()
{
ListBoxItems = new List<string> {"One", "Two", "Three"};
}
public void Open(object source)
{
MessageBox.Show((string) source);
}