【问题标题】:How can I display different ContextMenus in WPF ListView GridView?如何在 WPF ListView GridView 中显示不同的 ContextMenus?
【发布时间】:2009-09-08 11:22:10
【问题描述】:

我有一个 ListView GridView,其中 ListViewItems 代表不同类别的项目。我想为每个项目类别显示不同的 ContextMenu。我希望使用 DataTemplates 来做到这一点,但我很挣扎。我的 TreeView 每个类别都有一个 DataTemplate,我可以看到如何为每个类别设置不同的 ContextMenu,但我似乎无法让类似的 DataTemplates 为我的 ListView 工作。我是不是找错树了?

例如这是我的 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>

我可以将我的 ContextMenu 添加到 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 将是由各种模块自动填充的区域。

【问题讨论】:

    标签: wpf gridview listview prism contextmenu


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 2016-08-16
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多