/// <summary>
		/// 控件创建对象
		/// </summary>
		/// <param name="sourceData">数据源</param>
		/// <param name="items">绑定定义</param>
		/// <returns>不做校验的数据</returns>
		private DataBindingItemCollection MappingControlsToData(object sourceData, DataBindingItemCollection items)
		{
			DataBindingItemCollection unValidates = new DataBindingItemCollection();

			foreach (DataBindingItem item in items)
			{
				if (!item.IsValidate)
					unValidates.Add(item);

				if ((item.Direction & BindingDirection.ControlToData) != BindingDirection.None)
				{
					//对象路径
					string targetPro = string.Empty;
					object subData;
					//对象属性
					string targetProName = item.DataPropertyName;

					SplitPath(sourceData, item.DataPropertyName, out targetPro, out targetProName);

					if (item.SubBindings.Count > 0)
					{
						subData = FindObjectByPath(sourceData, item.DataPropertyName);
						MappingControlsToData(subData, item.SubBindings);
					}
					else
					{
						subData = FindObjectByPath(sourceData, targetPro);

						MappingOneControlToOneData(subData, targetProName, item);
					}
				}
			}

			return unValidates;
		}
		/// <summary>
		/// 将数据绑定至控件
		/// </summary>
		/// <param name="sourceData">数据源</param>
		/// <param name="items">数据项</param>
		private void MappingDataToControls(object sourceData, DataBindingItemCollection items)
		{
			if (sourceData != null)
			{
				foreach (DataBindingItem item in items)
				{
					if ((item.Direction & BindingDirection.DataToControl) != BindingDirection.None)
					{
						//对象路径
						string targetPro = string.Empty;
						object subData;

						//对象属性
						string targetProName = item.DataPropertyName;

						SplitPath(sourceData, item.DataPropertyName, out targetPro, out targetProName);

						//获取路径上的对象

						if (item.SubBindings.Count > 0)
						{
							subData = FindObjectByPath(sourceData, item.DataPropertyName);

							if (subData != null)
							{
								MappingDataToControls(subData, item.SubBindings);
							}
						}
						else
						{
							subData = FindObjectByPath(sourceData, targetPro);

							if (subData != null)
							{
								MappingOneDataToOneControl(TypePropertiesCacheQueue.Instance.GetPropertyInfo(subData.GetType(),
										GetObjectPropertyName(subData.GetType(), targetProName)), subData, targetProName, item);
							}
						}
					}
				}
			}
		}
		/// <summary>
		/// 服务端校验对象数据
		/// </summary>
		/// <param name="objdata">数据对象</param>
		/// <param name="unValidates"></param>
		/// <param name="msg">错误回传消息</param>
		/// <returns>是否验证成功</returns>
		private bool ValidateData(object objdata, DataBindingItemCollection unValidates, out string msg)
		{
			bool isval = false;

			msg = string.Empty;

			StringBuilder validMsgs = new StringBuilder();
			List<string> unValidatePropName = new List<string>();

			foreach (DataBindingItem bItem in unValidates)
			{
				unValidatePropName.Add(bItem.DataPropertyName);
			}

			if (ValidateUnbindProperties == false)
			{
				PropertyInfo[] pInfos = objdata.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);

				foreach (PropertyInfo pi in pInfos)
				{
					if (this.ItemBindings.Exists(item => item.DataPropertyName == pi.Name) == false)
						unValidatePropName.Add(pi.Name);
				}
			}

			Validator validator = ValidationFactory.CreateValidator(objdata.GetType(), unValidatePropName);
			ValidationResults valResults = validator.Validate(objdata);
			isval = valResults.IsValid();

			foreach (ValidationResult vItem in valResults)
			{
				msg = vItem.Tag == null ? vItem.Key : vItem.Tag;

				if (msg != null && msg.Length > 0)
				{
					msg += ":";
				}

				validMsgs.Append(msg + vItem.Message + "\r\n");

				if (vItem.NestedValidationResults != null)
				{
					foreach (ValidationResult vSubItem in vItem.NestedValidationResults)
					{
						msg = vSubItem.Tag == null ? vSubItem.Key : vSubItem.Tag;

						if (msg != null && msg.Length > 0)
							msg += ":";

						validMsgs.Append(msg + vSubItem.Message + "\r\n");
					}
				}
			}

			isval = DoExValidate(validMsgs, isval);
			msg = validMsgs.ToString();

			return isval;
		}