2009-03-23 5 views
2

Je souhaite faire glisser des données à partir d'un ListView et les lâcher dans un TreeView (le processus de traitement fonctionne correctement). J'utilise DataBinding et ItemTemplate pour remplir le TreeView.Rechercher TreeViewItem pour supprimer des données

<TreeView ItemsSource="{Binding Groups}" Name="tvGroups" AllowDrop="True" 
      Drop="tvDrop" DragOver="tvDragOver"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Participants}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" /> 
       <Button Tag="{Binding .}" Click="Button_Click_2"> 
        <Image Source="Resources/cross.png" /> 
       </Button> 
      </StackPanel> 
      <HierarchicalDataTemplate.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" > 
         <TextBlock Text="{Binding Alias}" /> 
         <Button Tag="{Binding .}" Name="btnDeleteParticipants" Click="btnParticipants_Click" > 
          <Image Source="Resources/cross.png" /> 
         </Button> 
        </StackPanel> 
       </DataTemplate> 
      </HierarchicalDataTemplate.ItemTemplate> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

private void tvDrop(object sender, DragEventArgs e) 
{ 
    if (e.Effects == DragDropEffects.Copy && 
     e.Data.GetDataPresent(typeof(Participant))) 
    { 
     Participant data = e.Data.GetData(typeof(Participant)) as Participant; 
    } 
} 

A Participant est déposé du ListView au TreeView. Maintenant, je dois trouver le Group. Des idées où obtenir le bon Group à partir du TreeView?

Répondre

2

Je définirais simplement les Drop = "tvDrop" et DragOver = "tvDragOver" sur le StackPanel dans le ItemTemplate du HierarchicalDataTemplate.

De cette façon 1) Vous n'avez pas risque d'être un événement quand quelque chose est tombé sur un groupe 2) Vous pouvez en toute sécurité jeter l'expéditeur à un FrameworkElement et obtenir le DataContext et jette à votre classe .

Vous pouvez également définir un gestionnaire différent sur la vue arborescente elle-même si vous devez prendre en charge le retrait des groupes.

+0

J'ai lié le groupe au StackPanel.Tag et cela fonctionne très bien. Merci beaucoup. –