2009-02-20 8 views
1

Suite à my question on binding in general, j'aimerais demander de l'aide sur le scénario suivant.WPF DataBinding - Evénement de feu à partir d'un bouton de contrôle répété

J'ai une collection d'objets (imageFileData) affichée via un DataTemplate dans un contrôle ListBox. Le contrôle est lié à une ObservableCollection. La collection et le modèle sont tous deux définis dans mes fichiers xaml et xaml.cs d'application. L'ajout dynamique d'éléments à la collection fonctionne comme prévu et affiche un nouvel élément basé sur un modèle dans ma zone de liste. Bien.

L'une des choses que je veux être en mesure de faire est de supprimer un élément spécifique de la collection en cliquant sur un bouton défini dans le DataTemplate. Définir un gestionnaire de clic pour le bouton me permet de gérer l'événement, mais je n'ai aucune idée d'où trouver l'objet imageFileData qui se rapporte au bouton modèle. Mon gestionnaire d'événements pour le bouton passe évidemment le bouton en tant qu'expéditeur, et un ensemble de RoutedEventArgs, mais je ne peux pas comprendre comment relier ces données à un élément de la collection afin de me permettre de le supprimer.

Quelqu'un peut-il m'aider avec cela, ou suis-je voué à des recherches Google maladroites et infructueuses parce que je ne sais pas par où commencer? ;)

Merci ZS

Répondre

5

Les données utilisées pour générer l'élément serait dans DataContext du Button (dont il a hérité du récipient - un ListBoxItem dans votre cas):

private void ButtonClicked(object sender, EventArgs e) 
{ 
    var button = sender as Button; 
    var imageFileData = button.DataContext as ImageFileData; 

    ... 
} 
+0

Kent, vous êtes une star - m'a sauvé d'un week-end de me demander ce qu'il faut faire pour trouver la réponse. Merci. – ZombieSheep

+0

De rien. Passe un bon weekend! –

0

Une autre façon serait de marcher l'arbre visuel jusqu'à un ListBoxItem (contenant tous les éléments que vous avez définis dans le datatemplate). Lorsque vous avez le ListBoxItem contenant le bouton cliqué, vous pouvez facilement obtenir et supprimer les données du ListBoxItem.

Un exemple de marcher l'arbre visuel se trouve vers le haut here dans GetObjectDataFromPoint et here dans FindAncestor.

Questions connexes