diff --git a/Editors/Audio/AudioEditor/Presentation/AudioProjectEditor/AudioProjectEditorViewModel.cs b/Editors/Audio/AudioEditor/Presentation/AudioProjectEditor/AudioProjectEditorViewModel.cs index 67a207440..1f12ea869 100644 --- a/Editors/Audio/AudioEditor/Presentation/AudioProjectEditor/AudioProjectEditorViewModel.cs +++ b/Editors/Audio/AudioEditor/Presentation/AudioProjectEditor/AudioProjectEditorViewModel.cs @@ -142,6 +142,9 @@ private void AddTableRow(DataRow row) else Table.ImportRow(row); + if (Table.Rows.Count != 1) + throw new Exception("There must only be one row in the Editor table."); + var selectedAudioProjectExplorerNode = _audioEditorStateService.SelectedAudioProjectExplorerNode; _logger.Here().Information($"Added {selectedAudioProjectExplorerNode.Type} row to Audio Project Editor table for {selectedAudioProjectExplorerNode.Name} "); } @@ -172,8 +175,8 @@ private void AddDataGridColumns(DataGridColumn column) private void OnEditorTableRowAddedToViewer(EditorTableRowAddedToViewerEvent e) { - // Clear table to ensure there's only one row - Table.Clear(); + // Clear rows to ensure there will only one row + Table.Rows.Clear(); // Re-initialise table var selectedAudioProjectExplorerNode = _audioEditorStateService.SelectedAudioProjectExplorerNode; @@ -186,8 +189,8 @@ private void OnEditorTableRowAddedToViewer(EditorTableRowAddedToViewerEvent e) private void OnViewerTableRowEdited(ViewerTableRowEditedEvent e) { - // Clear table to ensure there's only one row - Table.Clear(); + // Clear rows to ensure there will only one row + Table.Rows.Clear(); _eventHub.Publish(new EditorTableRowAddRequestedEvent(e.Row)); } @@ -286,7 +289,9 @@ partial void OnShowModdedStatesOnlyChanged(bool value) var selectedAudioProjectExplorerNode = _audioEditorStateService.SelectedAudioProjectExplorerNode; if (selectedAudioProjectExplorerNode.IsDialogueEvent()) { - Table.Clear(); + ResetTable(); + + // Reload the table from scratch because ComboBoxes values can't be updated LoadTable(selectedAudioProjectExplorerNode.Type); } } @@ -393,8 +398,11 @@ private void SetShowModdedStatesOnlyButtonEnablementAndVisibility() } private void ResetTable() - { - Table = new DataTable(); + { + // Table.Clear() only removes the rows, so we need to do Table.Columns.Clear() to clear it fully. If we don't clear the table properly + // it leads to issues where e.g. a Dialogue Event may reference a table from a previous Dialogue Event with different State Groups. + Table.Clear(); + Table.Columns.Clear(); DataGridColumns.Clear(); } diff --git a/Editors/Audio/AudioEditor/Presentation/AudioProjectViewer/AudioProjectViewerViewModel.cs b/Editors/Audio/AudioEditor/Presentation/AudioProjectViewer/AudioProjectViewerViewModel.cs index d4ca28dff..dfeccc1c3 100644 --- a/Editors/Audio/AudioEditor/Presentation/AudioProjectViewer/AudioProjectViewerViewModel.cs +++ b/Editors/Audio/AudioEditor/Presentation/AudioProjectViewer/AudioProjectViewerViewModel.cs @@ -394,7 +394,10 @@ public void ResetContextMenuVisibility() public void ResetTable() { + // Table.Clear() only removes the rows, so we need to do Table.Columns.Clear() to clear it fully. If we don't clear the table properly + // it leads to issues where e.g. a Dialogue Event may reference a table from a previous Dialogue Event with different State Groups. Table.Clear(); + Table.Columns.Clear(); DataGridColumns.Clear(); SelectedRows = []; }