Comment lier les commandes WPF entre un UserControl et une fenêtre parente

Je suis commencer par laisser une image de certains de parler.

Comment lier les commandes WPF entre un UserControl et une fenêtre parente

Donc, vous voyez, je veux créer un contrôle utilisateur WPF qui prend en charge la liaison à un parent de la fenêtre DataContext. Le contrôle de l'utilisateur est tout simplement un Bouton et une zone de liste avec un ItemTemplate de présenter les choses avec une Étiquette et un Bouton Supprimer.

Le bouton Ajouter devriez appeler un ICommand sur la vue principale de modèle pour interagir avec l'utilisateur dans la sélection d'un nouvel objet (instance de IThing). Le bouton Supprimer dans la ListBoxItem dans le contrôle de l'utilisateur devrait de même appeler un ICommand sur la vue principale de modèle à la demande de la chose de l'enlèvement. Pour que cela fonctionne, le bouton Supprimer aurait pour envoyer des informations d'identification du modèle de vue sur la chose demandé à être retiré. Il y a donc 2 types de Commande qui devrait être pouvant être liées à ce contrôle. Quelque chose comme AddThingCommand() et RemoveThingCommand(IThing chose).

J'ai eu la fonctionnalité de travail à l'aide Cliquez sur les événements, mais qui se sent hacky, la production d'un tas de code derrière le XAML, et se frotte contre le reste de la vierge du MVVM mise en œuvre. J'ai vraiment envie d'utiliser les Commandes et MVVM normalement.

Il y a assez de code pour obtenir une base de démonstration de travail, je suis pas sur de poster le tout afin de réduire la confusion. Quel est le travail qui me fait me sentir comme je suis si près, c'est le DataTemplate pour la ListBox lie l'Étiquette correctement, et lorsque la fenêtre parent ajoute des éléments à la collection, ils affichent.

<Label Content="{Binding Path=DisplayName}" />

Alors que qui affiche la IThing correctement, le bouton Supprimer juste à côté, il ne fait rien quand je clique dessus.

<Button Command="{Binding Path=RemoveItemCommand, RelativeSource={RelativeSource AncestorType={x:Type userControlCommands:ItemManager }}}">

Ce n'est pas très inattendu, car l'élément n'est pas fournie, mais le bouton Ajouter n'est pas nécessaire de spécifier quoi que ce soit, et c'est aussi ne pas appeler la commande.

<Button Command="{Binding Path=AddItemCommand, RelativeSource={RelativeSource AncestorType={x:Type userControlCommands:ItemManager }}}">

Donc ce que j'ai besoin est la "base" pour fixer le bouton Ajouter, afin qu'il appelle le parent de la fenêtre de commande pour ajouter une chose, et la plus complexe à résoudre pour le bouton Supprimer, de sorte qu'il appelle aussi le parent de commande, mais également de passer le long de son lié chose.

Un grand merci pour toutes les suggestions,

source d'informationauteur Todd Sprang