2009-03-23 8 views
2

私はListViewからデータをドラッグしてTreeViewにドロップしたいと思う。私はTreeViewを埋めるためにDataBindingとItemTemplateを使用します。データをドロップするTreeViewItemを見つけよう

<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; 
    } 
} 

Participantは、ツリービューにリストビューからドラッグされています。今私はGroupを見つける必要があります。任意のアイデアは、TreeViewから右Groupを取得する場所ですか?

答えて

2

HierarchicalDataTemplateのItemTemplateのStackPanelでDrop = "tvDrop"とDragOver = "tvDragOver"を設定するだけです。

こう 1)あなたは何かがグループ 2の外にドロップされたときにイベントを得ることのリスクを持っていません)あなたは安全のFrameworkElementに送信者をキャストし、DataContextのを取得し、あなたのクラスにキャストすることができます。

グループからのドラッグをサポートする必要がある場合は、ツリービュー自体に別のハンドラを設定することもできます。

+0

私はStackPanel.Tagにグループをバインドしましたが、うまくいきました。どうもありがとう。 –

関連する問題