Je sais que vous l'utiliserez pour invoquer la méthode sur le ViewModel, mais juste par curiosité, comment utiliseriez-vous pour câbler un gestionnaire d'événements sur l'instance de la vue, ce qui équivaut à le câblage dans le code derrière.CallMethodAction: Comment faire référence à l'instance d'une vue comme étant TargetObject
2
A
Répondre
1
Je pense que vous êtes probablement après quelque chose comme ceci (ignorer que cet exemple spécifique est mieux fait avec une commande).
<Button Content="Click this">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding}" MethodName="SomeMethod" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
+1
Cela ne fonctionne pas: la syntaxe de liaison vide fait référence au contexte de données actuel de la vue, pas à la vue elle-même. Dans un scénario MVVM, cela vous amène dans la VM. –
3
Le TargetObject est l'objet qui a la méthode à appeler, si vous avez la méthode dans votre fenêtre de code derrière l'objet est la fenêtre elle-même. Vous pouvez lier à elle par son nom:
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
...etcetera...
x:Name="UserControl">
Ainsi, votre CallMethodAction serait:
<ei:CallMethodAction MethodName="MyMethod"
TargetObject="{Binding ElementName=UserControl, Mode=OneWay}"/>
Demandez-vous comment vous auriez la méthode invoquée en réponse à un événement _or_ comment vous invoquer une gestionnaire d'événements en tant que méthode? – AnthonyWJones
@AnthonyWJones: Il existe une propriété TargetObject sur CallMethodAction. Je dois me référer à l'instance de la vue où se trouve ce déclencheur. J'ai pu me référer au nom du contrôle utilisateur, mais cela me donne une erreur de référence nulle. – epitka