예제 #1
0
        /// <summary>
        /// Gets the underlying bound value.
        /// </summary>
        /// <returns>The underlying bound value.</returns>
        protected T GetUnderlyingValue()
        {
            if (!IsReadable)
            {
                throw new InvalidOperationException(PresentationStrings.BindingIsWriteOnly);
            }

            return(getter(PresentationFoundation.GetDataSourceWrapper(dependencyValue.Owner.DependencyDataSource)));
        }
예제 #2
0
        /// <summary>
        /// Sets the underlying bound value.
        /// </summary>
        /// <param name="value">The value to set.</param>
        protected void SetUnderlyingValue(T value)
        {
            if (!IsWritable)
            {
                throw new InvalidOperationException(PresentationStrings.BindingIsReadOnly);
            }

            var owner    = dependencyValue.Owner;
            var metadata = dependencyValue.Property.GetMetadataForOwner(owner.GetType());

            if (metadata.CoerceValueCallback != null)
            {
                value = metadata.CoerceValue <T>(owner, value);
            }

            setter(PresentationFoundation.GetDataSourceWrapper(dependencyValue.Owner.DependencyDataSource), value);
            dependencyValue.DigestImmediately();
        }