diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3418aadacd..cea68308b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## v1.9.8
+
+### Fixed
+* Fix bug in `ContentControlBeforeContentUpdate` code by verifying the correct event name [#454](https://github.com/NetOfficeFw/NetOffice/pull/454)
+
+
## v1.9.7
### Added
diff --git a/Source/NetOffice.Tests/NetOffice.Tests.csproj b/Source/NetOffice.Tests/NetOffice.Tests.csproj
index 8c93ec14b0..f9e693a995 100644
--- a/Source/NetOffice.Tests/NetOffice.Tests.csproj
+++ b/Source/NetOffice.Tests/NetOffice.Tests.csproj
@@ -28,6 +28,7 @@
+
diff --git a/Source/NetOffice.Tests/WordApi/Events/DocumentEvents2_SinkHelperTests.cs b/Source/NetOffice.Tests/WordApi/Events/DocumentEvents2_SinkHelperTests.cs
new file mode 100644
index 0000000000..6bf13cc76a
--- /dev/null
+++ b/Source/NetOffice.Tests/WordApi/Events/DocumentEvents2_SinkHelperTests.cs
@@ -0,0 +1,45 @@
+// Copyright 2024 Cisco Systems, Inc.
+// Licensed under MIT-style license (see LICENSE.txt file).
+
+using System;
+using NetOffice.WordApi;
+using NetOffice.WordApi.Events;
+using NetOffice.Tests.Helpers;
+using NUnit.Framework;
+
+namespace NetOffice.Tests.WordApi.Events
+{
+ [TestFixture]
+ public class DocumentEvents2_SinkHelperTests
+ {
+ ///
+ /// Regression test for #453 - Ensures ContentControlBeforeContentUpdate event uses correct event name
+ /// in both Validate() and EventBinding.RaiseCustomEvent() calls
+ ///
+ [Test]
+ public void ContentControlBeforeContentUpdate_EventRaised_CallsHandlerWithCorrectEventName()
+ {
+ // Arrange
+ var eventBinder = new TestableComObjectStub();
+ eventBinder.AddEventRecipient(nameof(DocumentEvents2_SinkHelper.ContentControlBeforeContentUpdate));
+ var connectionPoint = new ConnectionPointStub();
+
+ var events = new DocumentEvents2_SinkHelper(eventBinder, connectionPoint);
+ var parameter1 = new FakeComObject();
+ var content = new object();
+
+ // Act
+ events.ContentControlBeforeContentUpdate(parameter1, ref content);
+ var actualParametersPassToEvent = eventBinder.LastRaisedEventParameters;
+
+ // Assert
+ Assert.AreEqual("ContentControlBeforeContentUpdate", eventBinder.LastRaisedEventName,
+ "EventBinding.RaiseCustomEvent must be called with 'ContentControlBeforeContentUpdate' event name");
+
+ CollectionAssert.IsNotEmpty(actualParametersPassToEvent);
+ var actualParameter1 = actualParametersPassToEvent[0];
+ Assert.IsInstanceOf(actualParameter1,
+ "Event ContentControlBeforeContentUpdate parameter must be of type ContentControl.");
+ }
+ }
+}
diff --git a/Source/NetOffice.Tests/packages.lock.json b/Source/NetOffice.Tests/packages.lock.json
index 12724d1732..b0d202f5e6 100644
--- a/Source/NetOffice.Tests/packages.lock.json
+++ b/Source/NetOffice.Tests/packages.lock.json
@@ -142,6 +142,15 @@
"NetOfficeFw.Core": "[1.9.3, )",
"NetOfficeFw.Office": "[1.9.3, )"
}
+ },
+ "NetOfficeFw.Word": {
+ "type": "Project",
+ "dependencies": {
+ "NetOfficeFw.Core": "[1.9.3, )",
+ "NetOfficeFw.Office": "[1.9.3, )",
+ "NetOfficeFw.VBIDE": "[1.9.3, )",
+ "stdole": "[7.0.3300, )"
+ }
}
}
}
diff --git a/Source/Word/Events/DocumentEvents2.cs b/Source/Word/Events/DocumentEvents2.cs
index 610253fef5..4b23b6e7db 100644
--- a/Source/Word/Events/DocumentEvents2.cs
+++ b/Source/Word/Events/DocumentEvents2.cs
@@ -279,7 +279,7 @@ public void ContentControlBeforeStoreUpdate([In, MarshalAs(UnmanagedType.IDispat
public void ContentControlBeforeContentUpdate([In, MarshalAs(UnmanagedType.IDispatch)] object contentControl, [In] [Out] ref object content)
{
- if (!Validate("ContentControlBeforeStoreUpdate"))
+ if (!Validate("ContentControlBeforeContentUpdate"))
{
Invoker.ReleaseParamsArray(contentControl, content);
return;