2010-05-03 26 views
3

Je suis nouveau sur SilverLight et Mvvm-Light. J'ai un DataForm sur mon affichage qui affiche/édite une propriété SelectedPerson (un objet Person) de mon modèle de vue.Comment savoir quel bouton de formulaire de données a été arrêté lors de l'utilisation de EventToCommand

Je souhaite exécuter une commande sur mon viewmodel lorsque l'utilisateur clique sur le bouton Enregistrer mais ne souhaite pas agir si l'utilisateur clique sur annuler.

j'ajouté ce qui suit à mon ViewModel:

public RelayCommand PersonEditEnded {get; set;} 
... 
public void Initialize() 
{ 
    PersonEditEnded = new RelayCommand(DoSomething); 
    ... 
} 

public void DoSomething() 
{ 
} 

j'ajouté ce qui suit à mon avis:

<toolkit:DataForm x:Name="PersonForm" ... CurrentItem="{Binding SelectedPerson, Mode=TwoWay}"> 
    <i:Interaction.Triggers> 
    <i:EventTrigger EventName="EditEnded"> 
     <gs:EventToCommand Command="{Binding PersonEditEnded, Mode=OneWay}"/> 
    </i:EventTrigger> 
    </i:Interaction.Triggers> 
</toolkit:DataForm> 

Cela fonctionne et la méthode DoSomething est appelée lorsque l'utilisateur presse Soumettre. Cependant, DoSomething est également appelé lorsque l'utilisateur appuie sur Annuler. Est-il possible de savoir quel bouton a été enfoncé ou de supprimer l'appel lorsque vous appuyez sur Annuler?

Merci pour toute l'aide que vous pouvez offrir!

Répondre

3

L'information que vous cherchez est cachée assez profondément dans le DataFormEditEndedEventArgs, dans l'EditAction. Cette propriété de type DataFormEditAction peut être soit Commit, soit Cancel.

Il existe un moyen de passer l'argument à la commande: Définissez la propriété PassEventArgsToCommand (sur l'objet EventToCommand) sur True. Sur le ViewModel, utilisez un RelayCommand. Le paramètre du délégué sera args événement, alors vous pouvez faire quelque chose comme

e => 
{ 
    if (e.CommitAction == DataFormEditAction.Commit) 
    { 
     DoSomething(); 
    } 
} 

Hope it helps,

Laurent

+0

Ok, ... mais si vous ne transmettez pas DataForms CurrentItem en tant que CommandParameter, comment pouvez-vous agir sur les données? – Stimul8d

0

Si vous voulez agir sur les données que vous pouvez également faire une reliure à CurrentItem et l'utiliser via votre commande (ou ailleurs) afin que vous puissiez faire ce que vous voulez à l'élément.

Questions connexes