Ejemplo n.º 1
0
        public void SetOn(object target)
        {
            SetterInfo setter = target.GetSetter(this.Name);
            object     value  = GetValue(setter.ExpectedType);

            setter.Setter(target, value);
        }
        private void InvokeSetter <T>(object info)
        {
            SetterInfo <T> setterInfo = info as SetterInfo <T>;

            if (_launchedWindow == null || setterInfo == null || setterInfo.MethodName == null)
            {
                return;
            }

            var method = typeof(IThreadedWindow).GetMethod(setterInfo.MethodName);

            if (method == null)
            {
                throw new Exception("Method not found: " + setterInfo.MethodName);
            }

            var parameters = method.GetParameters();

            if (parameters.Length != 1)
            {
                throw new Exception("Incorrect parameter count for method: " + parameters.Length + ". Method must take a single parameter.");
            }

            if (parameters[0].ParameterType != typeof(T))
            {
                throw new Exception("Wrong parameter type: " + typeof(T).Name + ". Expected: " + parameters[0].ParameterType.Name + ".");
            }

            if (_launchedWindow.Window.Dispatcher.CheckAccess())
            {
                method.Invoke(_launchedWindow, new object[] { setterInfo.Parameter });
            }
            else
            {
                _launchedWindow.Window.Dispatcher.Invoke(DispatcherPriority.Normal, new ParameterizedThreadStart(InvokeSetter <T>), setterInfo);
            }
        }