IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Recupérer la position du scrollViewer d'une dataGrid


Sujet :

Silverlight

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Par défaut Recupérer la position du scrollViewer d'une dataGrid
    Bonjour,

    J'ai une petite application silverlight dans laquelle j'ai une dataGrid à laquelle j'ai bindé une ObservableCollection.

    Le problème, c'est que quand je modifie mon observableCollection, ça ne se répercute par directement dans la dataGrid, pour ce problème, j'ai ajouté ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Sauvegarde de l'item sélectionné
    var selectedItem = MadataGrid.SelectedItem;
     
    //Mise à jour de la datagrid
    MaDataGrid.ItemSource = null;
    MaDataGrid.ItemSource = MonObservableCollection;
     
    //Affectation de l'item sélectionné
    MaDataGrid.SelectedItem = selectedItem;
    La datagrid se met bien à jour, et j'ai bien le même item de sélectionné, mais la scrollbar de la datagrid se retrouve en haut, je ne suis donc plus a la meme position qu'avant la mise à jour.

    Comment résoudre ce problème?

    Y a t'il une propriété de la dataGrid à sauvegarder entre temps pour retrouver sa position?

    Merci,

    Guillaume.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Au choix.

    Avant de setter ton ItemsSource tu récupères l'élément sélectionné puis tu utilises grid.ScrollIntoView().

    Ou tu récupères le ScrollViewer avec une méthode d'extension du genre GetChildrenOfType<T> (que tu trouvera en faisant une recherche sur ce forum) ensuite tu récupères sa position (avec VerticalScrollBarOffset) puis après avoir setter ton ItemsSource tu fais pareil.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Par défaut
    En faisant des recherches sur le forum, j'ai utilisé cette méthode dans une classe statique :

    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
        public static class Tools
        {
            public static IEnumerable<T> GetChildrenOfType<T>(this UIElement element)
            where T : UIElement
            {
                int count = VisualTreeHelper.GetChildrenCount(element);
                for (int i = 0; i < count; i++)
                {
                    FrameworkElement child = (FrameworkElement)VisualTreeHelper.GetChild(element, i);
                    if (typeof(T).IsAssignableFrom(child.GetType()))
                        yield return child as T;
     
                    foreach (var frameworkElement in GetChildrenOfType<T>(child))
                        yield return frameworkElement;
                }
            }
        }
    mais lorsque je l'applique à ma datagrid, je ne peux pas mettre ".FirstOrDefault" comme l'exemple qui était sur le forum, donc j'ai voulu testé ce que ça me ramenait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var test = (dataGrid.GetChildrenOfType<ScrollViewer>());
    Dans ma variable test, tout est à null.

    Ceci étant nouveau pour moi, pourriez-vous m'expliquer ce que j'ai fait de mal?

    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Par défaut
    Il me manquait une référence à "System.Linq" pour avoir le ".FirstOrDefault", mais ça ne change pas que j'ai toujours un résultat "null".

    Merci

Discussions similaires

  1. [VB.NET] Recupérer saisie courante dans une Datagrid
    Par jojo-la-praline dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/04/2006, 21h36
  2. [C#] Cacher une colonne d'une dataGrid
    Par royrremi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/05/2004, 16h00
  3. Obtenir la position du curseur dans une Image
    Par bastoune dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/11/2003, 21h02
  4. Pb d'update dans une DataGrid
    Par bidson dans le forum XMLRAD
    Réponses: 11
    Dernier message: 27/05/2003, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo