代码之家  ›  专栏  ›  技术社区  ›  serialhobbyist

如何在WPF ListView GridView中显示不同的上下文菜单?

  •  2
  • serialhobbyist  · 技术社区  · 17 年前

    我有一个ListView GridView,其中ListView items表示不同类别的项。我想为每一类项目显示不同的上下文菜单。我本来希望使用数据模板来实现这一点,但我现在很挣扎。我的TreeView每个类别都有一个DataTemplate,我可以看到如何为每个类别设置不同的ContextMenu,但是我似乎无法让类似的DataTemplates为我的ListView工作。我找错树了吗?

    E、 g.这是我的TreeView数据模板之一:

    <DataTemplate DataType="{x:Type viewModel:Cat1ViewModel}">
        <StackPanel Orientation="Horizontal">
            <Image Width="16" Height="16" Margin="3,0" 
                   Source="..\Images\cat1.png"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </DataTemplate>
    

    我可以把我的上下文菜单添加到StackPanel(我希望)和Bob的叔叔中。

    但是GridView的核心看起来是这样的:

    <ListView.Resources>
        <DataTemplate x:Key="image">
            <Image Width="16" Height="16" Margin="-3,0,-3,0"
                              HorizontalAlignment="Center"
                              Source="{Binding Path=ObjectClass, 
                                               Converter={StaticResource imageConverter}}" />
        </DataTemplate>
    </ListView.Resources>
    
    
    <ListView.View>
        <GridView>
            <GridViewColumn Width="20"
                            CellTemplate="{StaticResource image}"/>
            <GridViewColumn Width="140" Header="Name"
                            DisplayMemberBinding="{Binding Path=Name}"
                            infrastructure:GridViewSort.PropertyName="Name"/>
            <GridViewColumn Width="140" Header="Type" 
                            DisplayMemberBinding="{Binding Path=Category}"
                            infrastructure:GridViewSort.PropertyName="Category"/>
            <GridViewColumn Width="400" Header="Description"
                            DisplayMemberBinding="{Binding Path=Description}"
                            infrastructure:GridViewSort.PropertyName="Description"/>
        </GridView>
    </ListView.View>
    

    DataTemplate资源中的这个imageConverter为listViewItem的类别显示适当的图标。

    我不知道从哪里开始。所以,首先,我想做的是可能的吗?如果是,请你帮我开始。

    也:

    目前,每个ListViewItem都有一个viewModel支持—所有类别都使用同一个viewModel类。

    背景:

    我想显示不同的ContextMenu而不是更改ContextMenu的原因是我使用的是Prism,ContextMenus将是由不同模块自动填充的区域。

    1 回复  |  直到 17 年前
        1
  •  0
  •   TabbyCool    16 年前

    我认为可以使用ItemTemplateSelector来完成此操作,而不是在ListView上设置ItemTemplateSelector属性,使用ItemTemplateSelector属性。您必须创建自己的ItemTemplateSelector类的实现并定义逻辑,以便它知道要为每一组条件使用哪个模板,然后您只需要创建一组模板,您就应该准备好了!关于如何做到这一点,有一个很好的教程 here .