diff --git a/src/plugins/qmldesigner/core/include/qmlobjectnode.h b/src/plugins/qmldesigner/core/include/qmlobjectnode.h
index 0e321f8485626daed46ded111b2340140cae885a..5dd0ca6448854d9aa3069d7dc784b98b3ab95b37 100644
--- a/src/plugins/qmldesigner/core/include/qmlobjectnode.h
+++ b/src/plugins/qmldesigner/core/include/qmlobjectnode.h
@@ -68,6 +68,7 @@ public:
     bool hasBindingProperty(const QString &name) const;
     bool propertyAffectedByCurrentState(const QString &name) const;
     QVariant modelValue(const QString &name) const;
+    QString expression(const QString &name) const;
     bool isInBaseState() const;
     QmlPropertyChanges propertyChangeForCurrentState() const;
 
diff --git a/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp
index 3048cb7b90471bd70773301fba7882b1b4fe1ecc..ef88ccfe01c5e57b65af380137a4c5ead1f71dea 100644
--- a/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/core/model/qmlobjectnode.cpp
@@ -175,6 +175,25 @@ QVariant QmlObjectNode::modelValue(const QString &name) const
     return propertyChanges.modelNode().variantProperty(name).value();
 }
 
+QString QmlObjectNode::expression(const QString &name) const
+{
+    if (!isValid())
+        throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
+
+    if (currentState().isBaseState())
+        return modelNode().bindingProperty(name).expression();
+
+    if (!currentState().hasPropertyChanges(modelNode()))
+        return modelNode().bindingProperty(name).expression();
+
+    QmlPropertyChanges propertyChanges(currentState().propertyChanges(modelNode()));
+
+    if (!propertyChanges.modelNode().hasProperty(name))
+        return modelNode().bindingProperty(name).expression();
+
+    return propertyChanges.modelNode().bindingProperty(name).expression();
+}
+
 /*! \brief returns if ObjectNode is the BaseState
 
 \return true if the ObjectNode is in the BaseState