public ActionElementCommand(IResourceContext context, IValueProvider action, IValueProvider actionParameter, IValueProvider isEnabled, IValueProvider validates, IValueProvider closesDialog, IValueProvider isReset) { this.context = context; this.action = action?.GetBestMatchingProxy(context) ?? new PlainObject(null); switch (isEnabled) { case LiteralValue v when v.Value is bool b: canExecute = new PlainBool(b); break; case null: canExecute = new PlainBool(true); break; default: var proxy = isEnabled.GetBoolValue(context); proxy.ValueChanged = () => CanExecuteChanged?.Invoke(this, EventArgs.Empty); canExecute = proxy; break; } this.validates = validates != null ? (IBoolProxy)validates.GetBoolValue(context) : new PlainBool(false); this.closesDialog = closesDialog != null ? (IBoolProxy)closesDialog.GetBoolValue(context) : new PlainBool(true); resets = isReset != null ? (IBoolProxy)isReset.GetBoolValue(context) : new PlainBool(false); this.actionParameter = actionParameter?.GetBestMatchingProxy(context) ?? new PlainObject(null); }