查找TreeViewItem以删除数据

时间:2009-03-23 01:49:43

标签: c# xaml treeview drag-and-drop

我想从ListView拖动数据并将其放在TreeView中(拖动工作正常)。我使用DataBinding和ItemTemplate来填充TreeView。

<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从ListView拖到TreeView。现在我需要找到Group。有什么想法从TreeView获得正确的Group吗?

1 个答案:

答案 0 :(得分:2)

我只需在HierarchicalDataTemplate的ItemTemplate中的StackPanel上设置Drop =“tvDrop”和DragOver =“tvDragOver”。

这样 1)当团队中的某些内容被删除时,您没有任何获得活动的风险 2)您可以安全地将Sender强制转换为FrameworkElement并获取DataContext并将其强制转换为您的类。

如果您需要支持拖出组,您还可以在树视图上设置不同的处理程序。