Bonjour,
Je débute en WPF et j'ai encore quelques difficultés à bien assimiler le mécanisme de Binding. J'ai créé un code xaml avec un canvas, dans lequel il y a une image positionnée à l'aide de ses propriétés Canvas.Left et Canvas.Bottom.
Ces 2 propriétés sont bindés avec ma ViewModel (qui est définie comme étant le DataContext dans mon code behind), de la manière suivante :
Dans ma ViewModel, je retrouve logiquement Coordonnees_X et Coordonnees_Y, de la manière suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Canvas.Left="{Binding Coordonnees_X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Canvas.Bottom="{Binding Coordonnees_Y, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Et, toujours dans le ViewModel, j'ai défini l'événement OnPropertyChanged :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 private double coordonnees_X; public double Coordonnees_X { get { return coordonnees_X; } set { coordonnees_X = value; OnPropertyChanged("Coordonnees_X"); } } private double coordonnees_Y; public double Coordonnees_Y { get { return coordonnees_Y; } set { coordonnees_Y = value; OnPropertyChanged("Coordonnees_Y"); } }
Sur le fond, tout fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public event PropertyChangedEventHandler PropertyChanged; // J'utilise un évènement de ce type pour propager l'info. private void OnPropertyChanged(string nomPropriete) // Je veux propager au graphique le fait que les coordonnées ont changé { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(nomPropriete)); }
Je souhaite maintenant appliquer une Animation à mon image pour la faire évoluer, en lien avec l'appui sur les flèches du clavier. Si l'on prend l'exemple de l'appui sur la flèche droite, mon code behind se présente de la façon suivante :
PointDeDepart, PointDArrivee et Duree ont été correctement définis et l'animation fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 private void Fenetre_KeyDown(object sender, KeyEventArgs e) { DoubleAnimation Anim; if(e.Key == Key.Right) { Storyboard sb = new Storyboard(); Anim = new DoubleAnimation(PointDeDepart, PointDArrivee, TimeSpan.FromMilliseconds(Duree)); Storyboard.SetTargetName(Anim, "Nom_De_Mon_Image"); Storyboard.SetTargetProperty(Anim, new PropertyPath("(Canvas.Left)")); sb.Children.Add(Anim); sb.Begin(this); }
Par contre, au fur et à mesure que mon image bouge sur la droite, la propriété Coordonnees_X n'est pas mise à jour, alors que mon animation porte bien sur propriété Canvas.Left de mon image, qui est elle-même bindée en mode "TwoWay" avec Coordonnees_X. Je me serais donc attendu à ce que Coordonnees_X soit mis à jour en même temps que mon image bouge via l'animation.
Pourquoi est-ce que cela ne marche pas comme cela et comment faire pour que cela fonctionne ainsi ?
Merci de votre aide.
Partager