示例#1
0
        /// <summary>
        /// Setup the flushing operation.
        /// </summary>
        /// <typeparam name="TData">Data type of column.</typeparam>
        /// <param name="column">The column.</param>
        /// <param name="getValue">The delegate to return data value.</param>
        /// <returns>This row input for fluent coding.</returns>
        public RowInput <T> WithFlush <TData>(Column <TData> column, Func <T, TData> getValue)
        {
            if (column == null)
            {
                throw new ArgumentNullException(nameof(column));
            }

            VerifyNotSealed();
            _target = _target.Union(column);
            _flushFuncs.Add((p, v) =>
            {
                if (getValue == null)
                {
                    return(false);
                }
                var value = getValue(v);
                if (column.AreEqual(p.GetValue(column), value))
                {
                    return(false);
                }
                p.EditValue(column, value);
                return(true);
            });
            return(this);
        }
        private static IColumns GetTargetColumns(IColumns result, RowBinding binding)
        {
            Debug.Assert(binding != null);
            var input = binding.RowInput;

            if (input != null)
            {
                return(result.Union(input.Target));
            }
            var childBindings = binding.ChildBindings;

            if (childBindings == null)
            {
                return(result);
            }
            for (int i = 0; i < childBindings.Count; i++)
            {
                result = GetTargetColumns(result, childBindings[i]);
            }
            return(result);
        }