【发布时间】: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