     private func updateExpressionValues(animated: Bool) throws {
         for (name, expression) in _viewControllerExpressions {
             let value = try expression.evaluate()
+            guard _valueHasChanged[name]!() else {
+                continue
+            }
             try _viewController!.setValue(value, forExpression: name)
             if expression.isConstant {
                 _viewControllerExpressions.removeValue(forKey: name)

        }

        // Store getter
        var cachedValue: Any?
        _valueClearers.append {
            cachedValue = nil
        }
        let evaluate = expression.evaluate
        let symbols = expression.symbols

    private var _viewControllerExpressions = [String: LayoutExpression]()
    private var _viewExpressions = [String: LayoutExpression]()
    private var _valueClearers = [() -> Void]()
    private var _valueHasChanged = [String: () -> Bool]()

    private lazy var viewControllerConstructorArgumentTypes: [String: RuntimeType]? = self.viewControllerClass?.parameterTypes
    private lazy var viewConstructorArgumentTypes: [String: RuntimeType] = self.viewClass.parameterTypes
