2009-09-08 26 views
2

我有一個ListView GridView與ListViewItems代表不同類別的項目。我想爲每個類別的項目顯示不同的ContextMenu。我希望使用DataTemplates來做到這一點,但我很掙扎。我的TreeView每個類別都有一個DataTemplate,我可以看到如何爲每個類別設置不同的ContextMenu,但似乎無法獲得類似的DataTemplates來爲我的ListView工作。我吠叫錯了樹嗎?如何在WPF ListView GridView中顯示不同的ContextMenus?

E.g.這是我的DataTemplates的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的(我希望)和鮑勃的叔叔。

但在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> 

這imageConverter在DataTemplate中的資源顯示爲一個ListViewItem的類別相應的圖標。

我不確定從哪裏開始。那麼,首先,我想做什麼?如果是這樣,請你讓我開始吧。

另外:

目前,每個ListViewItem的由視圖模型的支持 - 所有類別使用相同的ViewModel類。

背景:

我想顯示不同的文本菜單,而不是改變文本菜單的原因是,我使用棱鏡和ContextMenus將通過各種模塊自動填充區域。

回答

0

我想你可以用ItemTemplateSelector來做到這一點,而不是在你的ListView上設置ItemTemplate屬性,使用ItemTemplateSelector屬性。您必須創建您自己的ItemTemplateSelector類的實現並定義邏輯,以便它知道每個條件集使用哪個模板,然後您只需創建一組模板,並且您應該很好去!有一個很好的教程,如何做到這一點here