2011-06-22 3 views
1

Je vais commencer par le code tel qu'il devrait être assez explicite:Comment lier un événement à la modification de la propriété sur un autre élément de l'arborescence dans XAML WPF?

<commonControls:SearchTextBox 
        x:Name="searchTextBox" 
        Margin="6,0" 
        HorizontalAlignment="Right" 
        MinWidth="50" 
        Width="130" 
        SearchMode="Instant" 
       > 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="Search"> 
          <cmd:EventToCommand Command="{Binding Search}" 
            CommandParameter="{Binding ElementName=searchTextBox, Path=Text}" /> 
         </i:EventTrigger> 
         <i:EventTrigger EventName="Cancel"> 
          <!-- Code to set searchTextBox.Text to Empty --> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
       </commonControls:SearchTextBox> 

Le SearchTextBox a un événement appelé Cancel qui exécute si l'utilisateur clique sur le bouton X sur le côté droit de la zone de texte . Ce que je voudrais faire, c'est accrocher sur cet événement, et effacer la propriété Text de la TextBox. Je cherche un moyen de le faire purement en XAML, sans code derrière, et sans frapper le ViewModel.

Répondre

1

Vous pouvez y parvenir en utilisant un concept appelé «comportements attachés», des propriétés jointes qui, sur la pièce jointe, gèrent les événements sur l'objet cible et effectuent une action en conséquence. Voir l'article suivant:

http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx

Je vois que vous utilisez déjà des interactions de mélange. Blend fournit un cadre simple pour les comportements les rendant plus faciles à implémenter, vous pouvez simplement remplacer la méthode OnAttach pour ajouter votre logique. Voir l'exemple ici:

http://www.scottlogic.co.uk/blog/colin/2011/06/metro-in-motion-part-7-panorama-prettiness-and-opacity/

+0

Je ne suis pas réellement utiliser Blend. J'utilise Mvvm Light, qui nécessite System.Windows.Interactivity pour prendre en charge le EventToCommand. Je vais jeter un coup d'oeil à ces liens maintenant, merci. –

+0

J'espérais quelque chose d'un peu plus simple malheureusement. Bien que ce soit la bonne réponse, je vais probablement le câbler en code-behind, car il s'agit d'un travail d'une ligne et n'a pas besoin d'être réutilisable. –

Questions connexes