2016-07-18 27 views
0

Ich habe ein Datagrid mit SelectionUnit="CellOrRowHeader" festgelegt.Aktualisiere DataGrid-Zeile, die sich im Bearbeitungszustand befindet, um Quellcode zu erzeugen

Da sich mein DataGrid im Inhaltsbereich eines TabControls befindet, wird die aktuell bearbeitete Zeile verworfen, wenn ich die Registerkarte wechsle.

Ich dachte, wenn ich die DataRowView der aktuellen Zeile bekomme, kann ich row?.EndEdit(); anrufen (die durch einen Enter-Hit auf der Tastatur ausgelöst wird, kann aber auch manuell aufgerufen werden), um die Daten auf die Quelle zu aktualisieren. Allerdings kann ich nicht die aktuelle DatarRowView bekommen.

Wie kann ich dem DataGrid mitteilen, alle aktuell bearbeiteten Daten zur Quelle zu aktualisieren? Ist mein Ansatz der richtige und wenn ja, wie bekomme ich den aktuellen DataRowView?

Wenn nicht, wie kann ich dem DataGrid mitteilen, den Bearbeitungsmodus zu beenden und seine neuen Daten zur Quelle zu aktualisieren?

Antwort

0

Dies ist keine direkte Lösung, löst jedoch das Problem.

Man kann einfach ein anderes Steuerelement auf die GUI fokussieren und die DataGrid wird ihre Änderungen in der aktuellen Zeile festschreiben. Der Effekt ist der gleiche wie wenn Sie die Eingabetaste drücken, während Sie die DataGrid bearbeiten.

Beispiel:

Ich habe einen TabControl. Wenn die TabControl die Registerkarte wechselt, möchte ich die aktuellen Änderungen gespeichert.

XAML des TabControl:

<TabControl DockPanel.Dock="Top" 
       x:Name="TabControl" 
       ItemsSource="{Binding Tabs}" 
       ContentTemplateSelector="{StaticResource TabContentTemplateSelector}" 
       SelectionChanged="TabControl_OnSelectionChanged" 
       IsSynchronizedWithCurrentItem="True"> 
.... 

Notiere die SelectionChanged="TabControl_OnSelectionChanged" aber es kann jedes andere Ereignis auf einer anderen Steuerung, die Sie wollen. Selbst ein Befehl, was auch immer.

Was Sie dann wollen, ist einfach eine andere GUI-Element konzentrieren:

private void TabControl_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // focus the tab control to lose focus on datagrids - they will then commit changes if possible. 
    TabControl.Focus(); // my TabControl is x:Name="TabControl", Focus sets the focus 
} 

Wie bereits erwähnt, ist der Effekt genau das gleiche, als wenn Sie die Eingabetaste drücken, während die Zelle bearbeiten.

+0

Ich habe das getestet, aber es ist nicht so. Das Datagrid bleibt im Bearbeitungsmodus. – rabejens

+0

Hmm. Es funktionierte für das, was ich brauchte. Was meinst du mit Aufenthalten im Bearbeitungsmodus? Bei der Frage ging es darum, das Programm auf die Quelle zu aktualisieren und den Bearbeitungsmodus nicht zu verlassen. Sie können 'Cell.EndEdit()' aufrufen, wenn Sie den Bearbeitungsmodus verlassen wollen. – Mafii

+0

Vielleicht ist mein Problem ein bisschen anders. Ich habe ein Tab-Steuerelement mit einigen Datagrids in dort, und wenn ich Tabs ändere, möchte ich das Datengitter, das ich gerade bearbeite, um seine Änderungen festschreiben. Die Verwendung von 'tabControl.Focus()' hat für mich nicht funktioniert, ich musste die Änderungen der entsprechenden Datageräte explizit übernehmen. – rabejens