7
votes

WPF DataGrid - Comment rester concentré sur le bas de la DataGrid car de nouvelles lignes sont ajoutées?

J'utilise < code> DataGrid à partir du Toolkit WPF et j'ai besoin de pouvoir Maintenir la mise au point sur le bas de la grille (c'est-à-dire la dernière ligne). Le problème que je suis en ce moment est que les lignes sont ajoutées la barre de défilement pour le DataGrid ne défile pas avec les nouvelles lignes ajoutées. Quelle est la meilleure façon d'accomplir cela?


0 commentaires

3 Réponses :


6
votes

ressemble à datagrid.scrollinView (

) permettra de mettre l'accent sur le bas du DataGrid .

3 commentaires

Où appelez-vous cette méthode?


Cela fait. Appelez simplement un appel après avoir mis à jour votre DataSource avec le nouvel élément. Assurez-vous d'appeler UpdateLayout () avant de ScrollINToView!


Pourquoi avez-vous besoin d'appeler UpdateLayout () d'abord? Je n'avais pas à faire ça. Est-ce juste une meilleure pratique pour une raison quelconque?



5
votes

Ceci est une approche simple à l'aide de l'événement Loadingrow: xxx

N'oubliez pas de le désactiver après la fin du chargement de la grille.


0 commentaires

5
votes

J'ai trouvé que le temps le plus utile d'appeler le ScrollINToView La méthode provient de l'événement ci-joint ScrollViewer.ScrollChanged. Ceci peut être défini sur XAML comme suit:

    private void control_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        // If the entire contents fit on the screen, ignore this event
        if (e.ExtentHeight < e.ViewportHeight)
            return;

        // If no items are available to display, ignore this event
        if (this.Items.Count <= 0)
            return;

        // If the ExtentHeight and ViewportHeight haven't changed, ignore this event
        if (e.ExtentHeightChange == 0.0 && e.ViewportHeightChange == 0.0)
            return;

        // If we were close to the bottom when a new item appeared,
        // scroll the new item into view.  We pick a threshold of 5
        // items since issues were seen when resizing the window with
        // smaller threshold values.
        var oldExtentHeight = e.ExtentHeight - e.ExtentHeightChange;
        var oldVerticalOffset = e.VerticalOffset - e.VerticalChange;
        var oldViewportHeight = e.ViewportHeight - e.ViewportHeightChange;
        if (oldVerticalOffset + oldViewportHeight + 5 >= oldExtentHeight)
            this.ScrollIntoView(this.Items[this.Items.Count - 1]);
    }


0 commentaires