コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: MvvmForm.cs プロジェクト: qaz734913414/PDF.NET-SOD
        /// <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);
        }