2009-02-09 7 views
3

Je dispose d'un programme WPF simple utilisant le modèle d'interface utilisateur maître-détail, où le détail montre l'élément actuellement sélectionné d'une collection dans le volet principal. J'utilise MVVM et chaque page XAML est soutenue par un objet ViewModel défini comme DataContext.Comment passer un objet viewmodel spécifique dans CommandParam d'un bouton?

Maintenant, je veux ajouter un bouton SUPPR dans la fenêtre principale pour supprimer de la liste principale des éléments. Cependant, je n'arrive pas à comprendre comment passer l'objet viewmodel de l'élément actuellement sélectionné en tant que bouton CommandParameter au code du gestionnaire de commandes routé.

Merci d'avance pour les pointeurs.

Mike

Répondre

2

Quelque chose à ce que Paul similaire a montré est où votre modèle de vue saura quel élément est sélectionné. C'est à dire.

public class MyVM 
{ 
public ObservableCollection<MyObject> MyCollection { get; set; } 
public MyObject CurrentItem { get; set; } 
} 

Votre XAML peut alors être simplement

CommandParameter="{Binding Path=CurrentItem}" 

Tant que votre panneau maître définit la propriété CurrentItem lorsque vous sélectionnez, votre commande peut simplement avoir le CurrentItem défini comme paramètre de commande.

1

Une option serait de créer chaque commande avec une référence au modèle de vue, et créer une propriété sur le modèle de vue qui est lié à l'élément sélectionné. De cette façon, vous n'avez pas besoin de passer l'élément sélectionné en tant que paramètre - la commande peut le récupérer à partir de la machine virtuelle. Si cela ne convient pas à votre situation, vous pourriez passer quelque chose d'élément sélectionné comme ceci:

<Button Content="Delete" 
       Command="{Binding DeleteCommand}" 
       CommandParameter="{Binding ElementName=listBox_, Path=SelectedValue}" /> 

Où listBox_ est un contrôle qui dérive du sélecteur.

Espoir qui aide,

Paul

Questions connexes