fix(runtime): store relinked view model instance on nested artboard (#11931) 76c7232fa1

Co-authored-by: hernan <hernan@rive.app>
diff --git a/.rive_head b/.rive_head
index 1d2e4af..dd38bb4 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-19486d13d0cfb9f7d1866a1371f71f1ec4e77dfe
+76c7232fa1bd2fc719cf1bb240f373bb2693fae7
diff --git a/src/nested_artboard.cpp b/src/nested_artboard.cpp
index f801028..df32fad 100644
--- a/src/nested_artboard.cpp
+++ b/src/nested_artboard.cpp
@@ -446,6 +446,7 @@
 
 void NestedArtboard::relinkDataContext(rcp<ViewModelInstance> viewModelInstance)
 {
+    m_viewModelInstance = viewModelInstance;
     auto instance = artboardInstance(0);
     if (instance && !instance->isStateful())
     {
diff --git a/tests/unit_tests/assets/databind_external_artboard_child.riv b/tests/unit_tests/assets/databind_external_artboard_child.riv
new file mode 100644
index 0000000..bbe4689
--- /dev/null
+++ b/tests/unit_tests/assets/databind_external_artboard_child.riv
Binary files differ
diff --git a/tests/unit_tests/assets/databind_external_artboard_main.riv b/tests/unit_tests/assets/databind_external_artboard_main.riv
new file mode 100644
index 0000000..afd24e4
--- /dev/null
+++ b/tests/unit_tests/assets/databind_external_artboard_main.riv
Binary files differ
diff --git a/tests/unit_tests/runtime/data_binding_artboards_test.cpp b/tests/unit_tests/runtime/data_binding_artboards_test.cpp
index 10f0c04..2655f2d 100644
--- a/tests/unit_tests/runtime/data_binding_artboards_test.cpp
+++ b/tests/unit_tests/runtime/data_binding_artboards_test.cpp
@@ -18,6 +18,7 @@
 #include <rive/viewmodel/viewmodel_instance_viewmodel.hpp>
 #include <rive/viewmodel/viewmodel_instance_trigger.hpp>
 #include "rive/animation/state_machine_instance.hpp"
+#include "rive/viewmodel/runtime/viewmodel_runtime.hpp"
 #include "rive/nested_artboard.hpp"
 #include "rive_file_reader.hpp"
 #include "utils/serializing_factory.hpp"
@@ -315,4 +316,43 @@
     stateMachine->advanceAndApply(0.1f);
     artboard->draw(renderer.get());
     CHECK(silver.matches("data_bind_artboard_input"));
+}
+
+TEST_CASE("Data bind external artboard with no initial source artboard",
+          "[silver]")
+{
+    SerializingFactory silver;
+    auto file =
+        ReadRiveFile("assets/databind_external_artboard_main.riv", &silver);
+    auto file2 =
+        ReadRiveFile("assets/databind_external_artboard_child.riv", &silver);
+
+    auto artboard = file->artboardDefault();
+    REQUIRE(artboard != nullptr);
+
+    silver.frameSize(artboard->width(), artboard->height());
+
+    auto stateMachine = artboard->stateMachineAt(0);
+    auto renderer = silver.makeRenderer();
+    stateMachine->advanceAndApply(0.0f);
+    artboard->draw(renderer.get());
+    silver.addFrame();
+
+    auto vmi = file->createViewModelInstance(artboard.get());
+    stateMachine->bindViewModelInstance(vmi);
+    auto artboardProp =
+        vmi->propertyValue("ab")->as<ViewModelInstanceArtboard>();
+    auto insertedArtboard = file2->bindableArtboardNamed("ExternalChild");
+    artboardProp->asset(insertedArtboard);
+
+    auto mainVM = file2->viewModelByName("Child");
+    auto mainVMI = mainVM->createInstanceFromName("Instance");
+    auto newCircleProp = mainVMI->propertyString("label");
+    vmi->replaceViewModelByName("child", mainVMI->instance());
+    newCircleProp->value("updated label");
+
+    stateMachine->advanceAndApply(0.016f);
+    artboard->draw(renderer.get());
+
+    CHECK(silver.matches("databind_external_artboard_main"));
 }
\ No newline at end of file
diff --git a/tests/unit_tests/silvers/databind_external_artboard_main.sriv b/tests/unit_tests/silvers/databind_external_artboard_main.sriv
new file mode 100644
index 0000000..900b3d8
--- /dev/null
+++ b/tests/unit_tests/silvers/databind_external_artboard_main.sriv
Binary files differ