/// <summary> /// (自动)绑定命令按钮的ControlEvent 到关联的命令对象 /// </summary> /// <param name="control"></param> public void BindCommandControls(ICommandControl control) { object dataSource = GetInstanceByMemberName(control.CommandObject); string[] propNames = control.CommandName.Split('.'); object obj = GetPropertyValue(dataSource, propNames); IMvvmCommand command = obj as IMvvmCommand; BindCommandControls(control, control.ControlEvent, command); }
/// <summary> /// 绑定控件的事件到命令接口对象 /// </summary> /// <param name="control">窗体控件</param> /// <param name="controlEvent">控件的事件</param> /// <param name="command">要绑定的命令接口对象</param> public void BindCommandControls(object control, string controlEvent, IMvvmCommand command) { EventHandler hander = new EventHandler( (object sender, EventArgs e) => { object paraValue = null; if (control is ICommandControl) { try { ICommandControl cmdCtr = control as ICommandControl; if (cmdCtr.ParameterObject != null && cmdCtr.ParameterProperty != null) { object paraSource = GetInstanceByMemberName(cmdCtr.ParameterObject); string[] paraPropNames = cmdCtr.ParameterProperty.Split('.'); paraValue = GetPropertyValue(paraSource, paraPropNames); } } catch (Exception ex) { RaiseBinderError(control, ex); return; } } if (command.BeforExecute(paraValue)) { try { command.Execute(paraValue); } catch (Exception ex) { RaiseBinderError(control, ex); } finally { command.AfterExecute(); } } }); Type ctrType = control.GetType(); ctrType.GetEvent(controlEvent).AddEventHandler(control, hander); }