2009-04-05 4 views
2

Je développe pour une unité MS Surface et j'utilise un ScatterView pour afficher quelques données. Le scénario ci-dessous correspond probablement à un ListBox normal (et ListBoxItems) aussi.Comment associer des gestionnaires d'événements à des éléments générés à l'aide de la liaison de données dans WPF?

Lorsque je note le ScatterView, WPF enveloppe automatiquement le contenu du DataTemplate avec ScatterViewItems. Je souhaite attacher certains gestionnaires d'événements pour l'événement ScatterManipulationCompleted du (généré) ScatterViewItem, mais je n'arrive pas à comprendre comment procéder.

Toute aide est très appréciée.

Répondre

2

Vous pouvez définir un Style sur le type de conteneur et spécifier un EventSetter comme celui-ci:

<surface:ScatterView> 
    <surface:ScatterView.ItemContainerStyle> 
     <Style TargetType="{x:Type surface:ScatterViewItem}"> 
      <EventSetter Event="ScatterManipulationCompleted" Handler="myHandler"/> 
     </Style> 
    </surface:ScatterView.ItemContainerStyle> 
</surface:ScatterView> 
+0

Oui, bien mieux que ma solution: - | –

+0

Pourquoi passer au travers? De plus, l'utilisation de EventSetters peut limiter considérablement votre flexibilité dans le stockage de votre ItemContainerStyle, car il doit être stocké en tant que ressource dans le code XAML ayant du code. Pourquoi ne pas simplement utiliser l'approche des événements routés décrite par Ben? – markti

+0

Cette approche vous permet de conserver la logique d'événement avec le style. Rien ne vous empêche d'avoir du code derrière avec vos dictionnaires de ressources. En plus de cela, il maintient la déclaration d'événement plus proche de la chose à laquelle il appartient, ce qui rend le XAML plus facile à suivre. –

0

Comme cela arrive souvent, je trouvai la/une réponse. Je ai regardé cela pendant les 20 dernières heures ou plus, seulement pour le trouver 5 minutes après avoir posté la question :-(

De toute façon: la solution que j'ai trouvé et qui m'aide pour l'instant est d'utiliser le Loaded . cas de ScatterView Dans le gestionnaire, je la boucle suivante:.

for (int i = 0; i < MiniBrowserContent.Items.Count; i++) 
{ 
    ScatterViewItem svItem = (ScatterViewItem)(MiniBrowserContent.ItemContainerGenerator.ContainerFromIndex(i)); 
    svItem.ScatterManipulationCompleted += new ScatterManipulationCompletedEventHandler(svItem_ScatterManipulationCompleted); 
} 

tout est venu me après avoir lu http://www.beacosta.com/blog/?p=7

Hope this helps quelqu'un d'autre

Bye, Bart

+0

Cela ne fonctionne que si vous n'ajoutez jamais de SVI supplémentaire à votre SV. Vous devriez utiliser l'approche des événements routés décrite par Ben. – markti

2

Vous devriez tirer parti des événements routés. Vous pouvez simplement écouter cet événement au niveau ScatterView.

 <surface:ScatterView surface:ScatterViewItem.ScatterManipulationCompleted="OnManipulationCompleted"/> 
Questions connexes