public void SetPropertyDataFromSubTransaction(DataContainer source)
        {
            ArgumentUtility.CheckNotNull("source", source);

            CheckNotDiscarded();
            source.CheckNotDiscarded();
            CheckSourceForSetDataFromSubTransaction(source);

            foreach (var kvp in _propertyValues)
            {
                var sourcePropertyValue = source.GetPropertyValue(kvp.Key);
                kvp.Value.SetDataFromSubTransaction(sourcePropertyValue);
            }

            _hasBeenChanged = null;
            RaiseStateUpdatedNotification(State);
        }
        public void SetValueDataFromSubTransaction(PropertyDefinition propertyDefinition, DataContainer sourceContainer)
        {
            ArgumentUtility.CheckNotNull("propertyDefinition", propertyDefinition);
            ArgumentUtility.CheckNotNull("sourceContainer", sourceContainer);

            CheckNotDiscarded();
            sourceContainer.CheckNotDiscarded();
            CheckSourceForSetDataFromSubTransaction(sourceContainer);

            var propertyValue       = GetPropertyValue(propertyDefinition);
            var sourcePropertyValue = sourceContainer.GetPropertyValue(propertyDefinition);

            propertyValue.SetDataFromSubTransaction(sourcePropertyValue);

            // Invalidate state rather than recalculating it - SetValueDataFromSubTransaction might be called multiple times.
            _hasBeenChanged = null;
        }