none
Problem beim WPF Datagrid mit ScrollIntoView, weil datagrid.Items.count = 0 ist nach Initialisierung ist RRS feed

  • Allgemeine Diskussion

  • Hallo msdn Gemeinschaft,

    ich habe ein Problem das die Themen "WPF DataGrid", "Databinding" und der Programmiersprache C# betrifft.

    Ich habe ein DataGrid in WPF das ich mit einem DataTable versehen möchte.

    <DataGrid Name="dataGrid" Height="100" ItemsSource="{Binding}" AutoGeneratingColumn="dataGrid_AutoGeneratingColumn"></DataGrid>

    Nun dieses DataGrid möchte ich beim Laden der Page mit dem DataTable verknüpfen und dann das DataGrid zum letzten Eintrag scrollen, daher habe ich im Constructor den DataContext hergestellt und ein Event dann ausführen lassen. Dieses Scrollen to End habe ich durch andere Beiträge schon mal gefunden und es funktioniert auch wenn die Items.Count > 0 sind.

    public MeinePage()
            {
                InitializeComponent();
    
                dataGrid.DataContext = myDataTable;
    
                dataGrid.UpdateLayout();
                dataGrid.Loaded += dataGrid_scrollToLast;
            }
    
    
    private void dataGrid_scrollToLast(object sender, EventArgs e)
            {
                if(dataGrid.Items.Count > 0)
                {
                    dataGrid.ScrollIntoView(dataGrid.Items[dataGrid.Items.Count - 1]); // scrollen bis zum Ende
                }
    
            }

    Mein Problem:

    Dieser Code funktioniert bei manchen Seiten und bei manchen nicht. Problem ist hierbei, dass dataGrid.Items.Count noch 0 ist, obwohl er in dataGrid schon den Context aufgenommen hat. Später geht übrigens dann das Scrollen da auch die Items.Count dann > 0 sind, aber ich würde halt am Anfang schon nach unten scrollen. Hab auch schon mal probiert mit einer while() Schleife solange zu warten, bis die Items > 0 sind, jedoch bleibt er dann für immer in dieser Schleife. Also mein Problem ist, dass es beim Aufruf vom ScrollIntoView noch nicht die Items dem DataGrid hinzugefügt hat.

    Fragen:

    - wisst ihr wann dann das DataGrid die Items erhält? Erst nach dem Constructor der aufgerufen wurde, oder erst nach einer gewissen Zeit?

    - kann man irgendwie sagen: "wenn das DataGrid alle Elemente beinhaltet vom DataTable, dann löse ein Event aus", weil wenn ich das machen könnte, dann kann ich ja auch scrollen lassen.

    Ich hoffe ihr könnt mir weiterhelfen.

    Besten Dank im Voraus.

    by the way: Bin noch WPF und c# Neuling, und ja ich habe schon wegen diesem Problem im Internet gesucht, doch nach langem suchen und probieren keine Lösung gefunden.

    Samstag, 16. Juni 2018 09:44

Alle Antworten

  • Hallo DontKnow92009,

    Die visuelle Struktur in einer WPF-Anwendung beschreibt die Struktur aller visuellen Elemente, die Teil der Benutzeroberfläche sind, d.h. alles, was Du auf dem Bildschirm siehst. Das DataGrid-Steuerelement rendert ein System.Windows.Controls.DataGridRow-Objekt für jedes Datenobjekt in seiner Elementsammlung und eine System.Windows.Controls.DataGridCell für jede Zelle jeder Zeile. Es gibt eine integrierte System.Windows.Media.VisualTreeHelper-Klasse, die Funktionalität zur Enumeration der Mitglieder einer visuellen Struktur bietet und sie ist sehr nützlich, wenn Du programmatischen Zugriff auf ein beliebiges Objekt in der visuellen Struktur benötigst. Weitere Informationen findest Du im folgenden Artikel:
    WPF: Programmatically Selecting and Focusing a Row or Cell in a DataGrid

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 19. Juni 2018 07:46
    Moderator