J'espérais que la réponse à my previous question pourrait m'aider avec celui-ci, mais ce n'était pas le cas. La situation initiale est à peu près la même:Trouver un parent dans wpf-treeview
<TreeView ItemsSource="{Binding Groups}" Name="tvGroups" AllowDrop="True">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Participants}">
<StackPanel Orientation="Horizontal" Drop="tvDrop" Tag="{Binding .}">
<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 btnParticipants_Click(object sender, RoutedEventArgs e)//Probanten aus Gruppe entfernen
{
Participant p = ((sender as Button).Tag as Participant);
if (p == null) return;
//TODO: Raus bekommen in welcher Gruppe ich löschen will
}
Je veux enlever Participant p
d'un Group
en cliquant sur le bouton (btnDeleteParticipants). J'ai essayé quelque chose comme celui-ci:
Control c = sender as Control;
while (!(c is TreeViewItem))
c = (c.Parent) as Control;
Mais cela n'a pas fonctionné (ne demandez pas pourquoi, je ne suis pas sûr). Je pourrais trouver le Group
en vérifiant s'il contient le Participant
(lié à btnDeleteParticipants.Tag
), mais cela interdirait aux participants d'être dans plus d'un groupe. Donc, des idées comment obtenir le bon Group
?
Edit:
Groups = new ObservableCollection<Group>();
Participants = new ObservableCollection<Participant>();
Vous trouverez peut-être [cet article] (http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx) par Josh Smith intéressant. – mostlytech