Bonjour,
J'me suis essayé récemment au MVVM (Donc je n'en maitrise pas encore tous les aspects, loin de là) et j'ai rencontré un problème.
Je voulais binder une commande à une ListBox, pour qu'elle s'active lors d'un double clique.
Donc après quelques recherches google, j'ai trouvé un tutoriel.
J'ai appliqué la méthode et elle fonctionne très bien lorsque je l'applique à un élément. Le problème c'est que pour une raison que j'ignore, ca échoue pour ma ListBox (J'obtiens une NullReferenceException). Voici le code de ma ListBox :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <ListBox ItemsSource="{Binding ListLiens}"> <ListBox.ItemTemplate> <DataTemplate> <Grid> <TextBlock Text="{Binding Text}" Margin="0" FontSize="13" FontFamily="Trebuchet MS" FontWeight="Bold" Behaviors:EventBehavior.Command="{Binding TestCommand}" Behaviors:EventBehavior.EventName="MouseDown" /> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Et voici la partie qui génère l'exception :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public void OnEventRaised(TSender sender, TEventargs e) { var element = sender as UIElement; System.Diagnostics.Debug.WriteLine(e.ToString()); if (element != null) { var command = (ICommand)element.GetValue(EventBehavior.CommandProperty); command.Execute(e); /* !!ICI!! */ } else { throw new NullReferenceException("This behavior can only be installed on UIElement objects !"); } }
Je ne comprends pas vraiment pourquoi cela ne génère une erreur que lorsque le TextBlock se trouve dans la ListBox, je n'ai aucun problème si je l'en sors.
J'ai testé de placé l'évènement directement dans la balise de la ListBox, sans résultat.
J'ai aussi un autre problème, c'est que dans le cas du TextBlock, il n'existe pas d'évènement double click, jusqu'ici j'utilisais une condition pour vérifier la valeur du e.Count dans l'évènement, mais là ce n'est pas possible.
Voilà, merci d'avance pour votre aide.![]()
Partager