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.