我有一个带有ListViewItems的ListView GridView,它代表不同类别的项目。我想为每个项目类别显示不同的ContextMenu。我希望使用DataTemplates做到这一点,但我正在努力。我的TreeView每个类别都有一个DataTemplate,我可以看到我如何为每个类别设置不同的ContextMenu,但我似乎无法获得类似的DataTemplates来为我的ListView工作。我吠叫错了树吗?
E.g。这是我对TreeView的DataTemplates之一:
<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将由各种模块自动填充区域。
答案 0 :(得分:0)
我认为您可以使用ItemTemplateSelector执行此操作,而不是在ListView上设置ItemTemplate属性,使用ItemTemplateSelector属性。您必须创建自己的ItemTemplateSelector类实现并定义逻辑,以便它知道每个条件使用哪个模板,然后您只需要创建一组模板,您应该好好去!有关如何执行此操作的良好教程here。