2010-11-17 2 views
1

Je:Reliure ContextMenu dans DataTemplate

<ListBox> 
      <ListBox.Resources> 
       <DataTemplate DataType="{x:Type ViewModels:StyleViewModel}"> 
        <DockPanel>        
         <Button Content="{Binding Name}" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"> 
          <Button.ContextMenu> 
           <ContextMenu> 
            <MenuItem Header="Delete" Command="{Binding PlacementTarget.Tag.DataContext.RemoveMember1FavoriteStyleCommand}" CommandParameter="{Binding}" /> 
           </ContextMenu> 
          </Button.ContextMenu> 
         </Button>        
        </DockPanel> 
       </DataTemplate> 
      </ListBox.Resources> 
     </ListBox> 

Ce que je suis en train de réaliser est de lier la commande dans le menuitem du menu contextuel à un ICommand qui est définie dans un viewmodel qui est le DataContext La zone de liste et le paramètre de commande doivent être StyleViewModel, mais ce que j'ai essayé n'a pas fonctionné. Est-ce que quelqu'un peut-il me montrer la bonne direction?

Répondre

4

trouvé!

<ListBox ItemsSource="{Binding ActiveCustomer.Member1FavoriteStyles}" ItemsPanel="{StaticResource ListBoxStyleItemsPanelAsVerticalStackPanel}" ItemContainerStyle="{StaticResource ListBoxItemContainerStyle}" Background="Transparent" BorderThickness="0"> 
      <ListBox.Resources> 
       <DataTemplate DataType="{x:Type ViewModels:StyleViewModel}"> 
        <DockPanel>        
         <Button Content="{Binding Name}" Tag="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"> 
          <Button.ContextMenu> 
           <ContextMenu> 
            <MenuItem Header="Remove" Command="{Binding PlacementTarget.Tag.RemoveMember1FavoriteStyleCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" CommandParameter="{Binding}" /> 
           </ContextMenu> 
          </Button.ContextMenu> 
         </Button>        
        </DockPanel> 
       </DataTemplate> 
      </ListBox.Resources> 
     </ListBox> 
1

travaille maintenant presque, sauf que maintenant CommandParameter = "{} La liaison" ne retourne pas le StyleViewModel:

<ListBox ItemsSource="{Binding ActiveCustomer.Member1FavoriteStyles}" ItemsPanel="{StaticResource ListBoxStyleItemsPanelAsVerticalStackPanel}" ItemContainerStyle="{StaticResource ListBoxItemContainerStyle}" Background="Transparent" BorderThickness="0"> 
      <ListBox.Resources> 
       <DataTemplate DataType="{x:Type ViewModels:StyleViewModel}"> 
        <DockPanel> 
         <Button Content="{Binding Name}" Tag="{Binding DataContext,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"> 
          <Button.ContextMenu> 
           <ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=Self}, Path=PlacementTarget.Tag}"> 
            <MenuItem Header="{Binding ActiveCustomer.Member1FirstName}" Command="{Binding RemoveMember1FavoriteStyleCommand}" CommandParameter="{Binding}" /> 
           </ContextMenu> 
          </Button.ContextMenu> 
         </Button>        
        </DockPanel> 
       </DataTemplate> 
      </ListBox.Resources> 
     </ListBox> 

Je me demande si cela peut être fait ...