Bonjour,
En très résumé, lors d'un changement par code du contenu d'une grille, il m'est impossible d'en rafraichir le contenu.
En beaucoup plus détaillé:
Sur une page j’ai deux grilles, l’une de Catégories et l’autre de Vêtements.
Une catégorie contient zéro à n vêtements.
Ma page doit permettre d’entrer de nouvelles catégories et de nouveaux vêtements.
L’utilisateur doit être capable de classer les vêtements d’une catégorie dans l’ordre qu’il souhaite.
J’ai donc mis dans ma table vêtements un champ « VetOrdre » qui me permet de retenir l’ordre dans lequel les vêtements sont classés.
J’ai donc par exemple pour la catégorie « Chemises » les vêtements suivants :
(Identifiant, libellé, ordre)
En dessous de ma grille, j’ai un bouton « remonte » qui me permet de changer l’ordre du vêtement actuellement sélectionné.3 Chemise en soie 0
1 Chemise en coton 1
2 Chemise en lin 2
Sur l’exemple précédent, si je suis positionné sur "Chemise en coton" et que je pousse sur "remonte", je vais obtenir :
L’action qui se passe dans « remonte » est la suivante :1 Chemise en coton 0
3 Chemise en soie 1
2 Chemise en lin 2
Bien que l’ordre à bien été changé dans ma table, et malgré la fonction RefreshGrilleVetement, à l’écran, aucun rafraichissement de la grille n’a eu lieu et c’est encore l’ancien ordre qui apparait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Private Sub btnRemonteVetement_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) If GrilleVetement.SelectedItem Is Nothing Then Return 'doit d'abord découvrir si le vêtement sélectionné n'est pas le premier de la liste If CType(GrilleVetement.SelectedItem, Vetement).VetOrder > 0 Then 'je diminue l'ordre du vêtement sélectionné de 1 CType(GrilleVetement.SelectedItem, Vetement).VetOrder -= 1 'je me positionne sur le vêtement précédent GrilleVetement.SelectedIndex -= 1 'j'augmente l'ordre du vêtement précédent de 1 CType(GrilleVetement.SelectedItem, Vetement).VetOrder += 1 'je me positionne à nouveau sur le vêtement original GrilleVetement.SelectedIndex += 1 'je sauve mes changements d'ordre save() 'je tente de rafraichir l'écran RefreshGrilleVetement(Me.GrilleCategories.SelectedItem.CatId()) End If End Sub
Voici le code de ma fonction :
Il faut encore savoir que « GetVetementsByCatIdQuery(maCategId) » me retourne tous les vêtements d’une catégorie classés par « VetOrdre »
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub RefreshGrilleVetement(ByVal maCategId As Integer) CType(source.DomainContext, LaundryContext).Vetements.Clear() GrilleVetement.ItemsSource = Nothing Me.GrilleVetement.ItemsSource = CType(source.DomainContext, LaundryContext).Vetements source.DomainContext.Load(CType(source.DomainContext, LaundryContext).GetVetementsByCatIdQuery(maCategId)) End Sub
La seule méthode pour rafraichir ma grille est de me positionner sur une autre catégorie, (par exemple « Pantalons », et de revenir sur ma catégorie « Chemises ».
Et pourtant, ….
Le code utilisé lors d’un changement de catégorie est le suivant :
Et il utilise donc la même fonction que précédemment !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub GrilleCategories_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) If GrilleCategories.SelectedItem Is Nothing Then Return RefreshGrilleVetement(Me.GrilleCategories.SelectedItem.CatId) End Sub
Pour être tout à fait complet, voici la définition xaml de ma grille :
Si quelqu'un a une idée, elle est la bienvenue.<dataataGrid x:Name="GrilleVetement" a AutoGenerateColumns="False" RowEditEnded="GrilleVetement_RowEditEnded" ItemsSource="{Binding DomainContext.Vetements, ElementName=source}">
Partager