0

我想用 mvvm 在 wpf 中开发一个通用的上下文菜单。我想在每个具有样式列表视图的视图模型中显示它:ItemContainerStyle =“{DynamicResource ListViewItemContainerStyle}”。

上下文菜单将有 2 个选项,这些选项将根据每个视图模型中的某些约束启用或不启用。启用与否将由命令的 canexecute 管理。

如果我把它放在列表视图内的每个视图中,我没有问题,但我希望它只放在每个列表视图之外的一个地方。我试图将它放在 ListViewItemContainerStyle 中,但它显示异常“无法将 System.Windows.Controls.ContextMenu 添加到 System.Object”。这是我的代码片段

<Style x:Key="ListViewItemContainerStyle"
       TargetType="ListViewItem">
   .
   .
   .
    <Setter Property="ContextMenu">
        <Setter.Value>
            <ContextMenu>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="AddNew">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.New}" />
                    </MenuItem.Header>
                </MenuItem>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="Delete">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.Delete}" />
                    </MenuItem.Header>
                </MenuItem>
            </ContextMenu>
        </Setter.Value>
    </Setter>
 .
 .
 .

知道如何做到这一点吗?

4

1 回答 1

0

尝试这个:

<ContextMenu x:Shared="False" x:Key="ListViewContextMenu>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="AddNew">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.New}" />
                    </MenuItem.Header>
                </MenuItem>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="Delete">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.Delete}" />
                    </MenuItem.Header>
                </MenuItem>
            </ContextMenu>

<Style x:Key="ListViewItemContainerStyle"
       TargetType="ListViewItem">
    <Setter Property="ContextMenu" Value="{StaticResource ListViewContextMenu}"/>
于 2013-03-11T14:11:30.217 回答