Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caliburn Micro中的WPF上下文菜单_Wpf_Contextmenu_Caliburn.micro_Caliburn - Fatal编程技术网

Caliburn Micro中的WPF上下文菜单

Caliburn Micro中的WPF上下文菜单,wpf,contextmenu,caliburn.micro,caliburn,Wpf,Contextmenu,Caliburn.micro,Caliburn,我试图在ListBox ItemTemplate中获取上下文菜单,以调用父视图模型上的方法,并将单击的项作为参数传递进来。我对项目模板中的其他按钮也有这样的功能,但是对于上下文菜单,它似乎失败了 我有以下xaml(为清晰起见缩写): ... .. 文本。。 我觉得这与视觉树不同有关,因此Caliburn无法可靠地解析该方法。我确信这是一个常见的问题,我也尝试了一些在网上找到的东西,但似乎没有任何效果 有什么想法吗???使用我在上找到的信息,我修改了您的XAML,使其看起来像这样: <

我试图在ListBox ItemTemplate中获取上下文菜单,以调用父视图模型上的方法,并将单击的项作为参数传递进来。我对项目模板中的其他按钮也有这样的功能,但是对于上下文菜单,它似乎失败了

我有以下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);
    }