Example #1
0
        protected override bool TryParseValueFromString(string value, [System.Diagnostics.CodeAnalysis.MaybeNullWhen(false)] out TItem result, [System.Diagnostics.CodeAnalysis.NotNullWhen(false)] out string validationErrorMessage)
        {
            Console.WriteLine($"TryParseValueFromString {value}");
            // Let's Blazor convert the value for us
            if (BindConverter.TryConvertTo(value, System.Globalization.CultureInfo.CurrentCulture, out TItem parsedValue))
            {
                result = parsedValue;
                validationErrorMessage = null;
                return(true);
            }

            result = default;
            validationErrorMessage = $"The {FieldIdentifier.FieldName} field is not valid.";
            return(false);
        }
Example #2
0
        static bool TryParseDateTime(string value, out TValue result)
        {
            var success = BindConverter.TryConvertToDateTime(value, cultureInfoStatic, DateFormat, out var parsedValue);

            if (success)
            {
                result = (TValue)(object)parsedValue;
                return(true);
            }
            else
            {
                result = default;
                return(false);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="value"></param>
        /// <param name="result"></param>
        /// <param name="validationErrorMessage"></param>
        /// <returns></returns>
        protected override bool TryParseValueFromString(string?value, [MaybeNullWhen(false)] out TValue result, [NotNullWhen(false)] out string?validationErrorMessage)
        {
            var ret = false;

            validationErrorMessage = null;
            if (BindConverter.TryConvertTo <TValue>(value, CultureInfo.InvariantCulture, out result))
            {
                ret = true;
            }
            else
            {
                validationErrorMessage = string.Format(CultureInfo.InvariantCulture, ParsingErrorMessage !, DisplayText);
            }
            return(ret);
        }
Example #4
0
        static bool TryParseDateTimeOffset(string value, out T result)
        {
            var success = BindConverter.TryConvertToDateTimeOffset(value, CultureInfo.InvariantCulture, DateFormat, out var parsedValue);

            if (success)
            {
                result = (T)(object)parsedValue;
                return(true);
            }
            else
            {
                result = default;
                return(false);
            }
        }
Example #5
0
        static bool TryParseDateTime(string?value, [MaybeNullWhen(false)] out TValue result)
        {
            var success = BindConverter.TryConvertToDateTime(value, CultureInfo.InvariantCulture, DateFormat, out var parsedValue);

            if (success)
            {
                result = (TValue)(object)parsedValue;
                return(true);
            }
            else
            {
                result = default;
                return(false);
            }
        }
Example #6
0
    /// <inheritdoc />
    protected override void BuildRenderTree(RenderTreeBuilder builder)
    {
        Debug.Assert(Context != null);

        builder.OpenElement(0, "input");
        builder.AddMultipleAttributes(1, AdditionalAttributes);
        builder.AddAttributeIfNotNullOrEmpty(2, "class", AttributeUtilities.CombineClassNames(AdditionalAttributes, Context.FieldClass));
        builder.AddAttribute(3, "type", "radio");
        builder.AddAttribute(4, "name", Context.GroupName);
        builder.AddAttribute(5, "value", BindConverter.FormatValue(Value?.ToString()));
        builder.AddAttribute(6, "checked", Context.CurrentValue?.Equals(Value));
        builder.AddAttribute(7, "onchange", Context.ChangeEventCallback);
        builder.AddElementReferenceCapture(8, __inputReference => Element = __inputReference);
        builder.CloseElement();
    }
        public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction, string columnName)
        {
            var value = actualItemContext.GetActualItemColumnValue(columnName);

            rendererTreeBuilder
            .OpenElement(HtmlTagNames.Div, "edit-field-wrapper")
            .OpenElement(HtmlTagNames.Input, "edit-text-field")
            .AddAttribute(HtmlAttributes.Type, GetInputType(value?.ToString() ?? InputTypeText))
            .AddAttribute(HtmlAttributes.Value, BindConverter.FormatValue(value))
            .AddAttribute(HtmlJsEvents.OnChange, EventCallback.Factory.Create(this,
                                                                              (ChangeEventArgs e) => onChangeAction?.Invoke(columnName, BindConverterExtensions.ConvertTo(e.Value, string.Empty)))
                          )
            .CloseElement()
            .CloseElement();
        }
 /// <inheritdoc />
 protected override void BuildRenderTree(RenderTreeBuilder builder)
 {
     builder.OpenElement(0, "input");
     builder.AddMultipleAttributes(1, AdditionalAttributes);
     builder.AddAttribute(2, "id", Id);
     builder.AddAttribute(3, "required", Required);
     builder.AddAttribute(4, "disabled", !Enabled);
     builder.AddAttribute(5, "type", "date");
     builder.AddAttribute(6, "class", $"{CssClass} pf-c-form-control {(IsValid == true  && !HasValidationMessages ? CssClassConstants.Success : String.Empty)} {AdditionalCssClass}");
     builder.AddAttribute(7, "value", BindConverter.FormatValue(CurrentValueAsString));
     builder.AddAttribute(8, "onchange", EventCallback.Factory.CreateBinder <string>(this, __value => _editingValue = __value, CurrentValueAsString));
     builder.AddAttribute(9, "aria-invalid", HasValidationMessages.ToString().ToLower());
     builder.AddAttribute(10, "aria-describedby", $"{Id}-helper");
     builder.AddAttribute(11, "onblur", EventCallback.Factory.Create <FocusEventArgs>(this, OnBlur));
     builder.CloseElement();
 }
Example #9
0
        private static bool ToDateTimeOffset(string value, out T result)
        {
            var formatString = GetDateTimeFormatString(value);
            var success      = BindConverter.TryConvertToDateTimeOffset(value, CultureInfo.InvariantCulture, formatString, out DateTimeOffset parsedValue);

            if (success)
            {
                result = (T)(object)parsedValue;
                return(true);
            }
            else
            {
                result = default;
                return(false);
            }
        }
Example #10
0
 /// <summary>
 /// コンポーネントのレンダリングを行います。
 /// </summary>
 /// <param name="builder">ビルダ。</param>
 protected override void BuildRenderTree(RenderTreeBuilder builder)
 {
     builder.OpenElement(0, "input");
     builder.AddMultipleAttributes(1, this.AdditionalAttributes);
     builder.AddAttribute(2, "type", "text");
     builder.AddAttribute(3, "value", BindConverter.FormatValue(this.FilterText));
     builder.AddAttribute(4, "onchange", EventCallback.Factory.CreateBinder <string>(
                              this,
                              __value =>
     {
         this.FilterText = __value;
         this.Filter.FilterOn();
     },
                              this.FilterText
                              ));
     builder.CloseElement();
 }
Example #11
0
        protected override bool TryParseValueFromString(string?value, out TEnum result, out string validationErrorMessage)
        {
            // Let's Blazor convert the value for us 😊
            if (BindConverter.TryConvertTo(value, CultureInfo.CurrentCulture, out TEnum? parsedValue))
            {
                result = parsedValue !;
                validationErrorMessage = null !;
                return(true);
            }

            // Map null/empty value to null if the bound object is nullable
            if (string.IsNullOrEmpty(value))
            {
                var nullableType = Nullable.GetUnderlyingType(typeof(TEnum));
                if (nullableType is not null)
                {
                    result = default !;
        private async System.Threading.Tasks.Task InternalValueChanged(object value)
        {
            TValue newValue;

            try
            {
                BindConverter.TryConvertTo <TValue>(RemoveNonNumericCharacters(value), Culture, out newValue);
            }
            catch
            {
                newValue = default(TValue);
            }

            decimal?newValueAsDecimal = newValue == null ? default(decimal?) : (decimal)ConvertType.ChangeType(newValue, typeof(decimal));

            if (object.Equals(Value, newValue) && !ValueChanged.HasDelegate)
            {
                await JSRuntime.InvokeAsync <string>("Radzen.setInputValue", input, Value);

                return;
            }

            if (Max.HasValue && newValueAsDecimal > Max.Value)
            {
                newValueAsDecimal = Max.Value;
            }

            if (Min.HasValue && newValueAsDecimal < Min.Value)
            {
                newValueAsDecimal = Min.Value;
            }

            Value = (TValue)ConvertType.ChangeType(newValueAsDecimal, typeof(TValue));
            if (!ValueChanged.HasDelegate)
            {
                await JSRuntime.InvokeAsync <string>("Radzen.setInputValue", input, Value);
            }

            await ValueChanged.InvokeAsync(Value);

            if (FieldIdentifier.FieldName != null)
            {
                EditContext?.NotifyFieldChanged(FieldIdentifier);
            }
            await Change.InvokeAsync(Value);
        }
Example #13
0
        /// <inheritdoc/>
        protected override bool TryParseValueFromString(string value, out T result, out string validationErrorMessage)
        {
            var success = BindConverter.TryConvertTo <T>(value, CultureInfo.CurrentCulture, out var parsedValue);

            if (success)
            {
                result = parsedValue;
                validationErrorMessage = null;
                return(true);
            }
            else
            {
                result = default;
                validationErrorMessage = $"{this.FieldIdentifier.FieldName} field isn't valid.";
                return(false);
            }
        }
Example #14
0
    public void FormatValue_TypeConverter()
    {
        // Arrange
        var value = new Person()
        {
            Name = "Glenn",
            Age  = 47,
        };

        var expected = JsonSerializer.Serialize(value);

        // Act
        var actual = BindConverter.FormatValue(value);

        // Assert
        Assert.Equal(expected, actual);
    }
Example #15
0
        /// <inheritdoc />
        protected override bool TryParseValueFromString(string?value, [MaybeNullWhen(false)] out TValue result, [NotNullWhen(false)] out string?validationErrorMessage)
        {
            if (!typeof(TValue).IsEnum)
            {
                throw new InvalidOperationException($"{this.GetType()} does not support the type '{typeof(TValue)}'.");
            }

            if (BindConverter.TryConvertTo <TValue>(value, CultureInfo.CurrentCulture, out var parsedValue))
            {
                result = parsedValue;
                validationErrorMessage = null;
                return(true);
            }

            result = default;
            validationErrorMessage = $"The {this.FieldIdentifier.FieldName} field is not valid.";
            return(false);
        }
Example #16
0
        protected override bool TryParseValueFromString(string?value, [MaybeNullWhen(false)] out TValue result, [NotNullWhen(false)] out string?validationErrorMessage)
        {
            if (FieldData !.TextType == InputType.Number)
            {
                value = new string((value ?? "").Where(q => Char.IsDigit(q) || q == '.' || q == ',').ToArray());
            }

            if (BindConverter.TryConvertTo <TValue>(value, CultureInfo.InvariantCulture, out result))
            {
                validationErrorMessage = null;
                return(true);
            }
            else
            {
                validationErrorMessage = string.Format(CultureInfo.InvariantCulture, $"Could not pass '{value}' into {{0}} of type {typeof(TValue).FullName}.", DisplayName ?? FieldIdentifier.FieldName);
                return(false);
            }
        }
        protected void OnInput(ChangeEventArgs args, int index = 0)
        {
            if (index != 0)
            {
                throw new ArgumentOutOfRangeException("DatePicker should have only single picker.");
            }
            if (args == null)
            {
                return;
            }

            if (BindConverter.TryConvertTo(args.Value.ToString(), CultureInfo, out TValue changeValue))
            {
                if (Picker == DatePickerType.Date)
                {
                    if (IsDateStringFullDate(args.Value.ToString()))
                    {
                        CurrentValue = changeValue;
                    }
                }
                else
                {
                    CurrentValue = changeValue;
                }

                GetIfNotNull(changeValue, (notNullValue) =>
                {
                    PickerValues[0] = notNullValue;
                });

                if (OnChange.HasDelegate)
                {
                    OnChange.InvokeAsync(new DateTimeChangedEventArgs
                    {
                        Date       = Convert.ToDateTime(changeValue, this.CultureInfo),
                        DateString = GetInputValue(index)
                    });
                }

                StateHasChanged();
            }

            UpdateCurrentValueAsString();
        }
Example #18
0
        /// <summary>
        /// コンポーネントのレンダリングを行います。
        /// </summary>
        /// <param name="builder">ビルダ。</param>
        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            if (this.Item.EditMode == EditModeOptions.Edit)
            {
                if (this.EditableState == EditStateOptions.None ||
                    (this.Item.EditState & this.EditableState) > 0)
                {
                    builder.OpenElement(0, "select");
                    builder.AddMultipleAttributes(1, AdditionalAttributes);
                    builder.AddAttribute(2, "value", BindConverter.FormatValue(this.CurrentValueAsString));
                    builder.AddAttribute(3, "onchange", EventCallback.Factory.CreateBinder <string>(
                                             this,
                                             __value =>
                    {
                        this.CurrentValueAsString = __value;
                        this.SelectedCallBack?.Invoke(this.GetSelectedDropItem());
                    },
                                             this.CurrentValueAsString
                                             ));

                    if (this.DropItems != null)
                    {
                        var seq = 4;
                        foreach (var dropItem in this.DropItems)
                        {
                            builder.OpenElement(seq++, "option");
                            builder.AddAttribute(seq++, "value", dropItem.Key);
                            builder.AddContent(seq++, dropItem.Value);
                            builder.CloseElement();
                        }
                    }
                    builder.CloseElement();
                }
                else
                {
                    builder.AddContent(100, this.DisplayValue);
                }
            }
            else
            {
                builder.AddContent(200, this.DisplayValue);
            }
            base.BuildRenderTree(builder);
        }
        protected void OnInput(ChangeEventArgs args, int index = 0)
        {
            if (args == null)
            {
                return;
            }

            var array = Value as Array;

            if (BindConverter.TryConvertTo(args.Value.ToString(), CultureInfo, out DateTime changeValue))
            {
                array.SetValue(changeValue, index);
                PickerValues[index] = changeValue;

                StateHasChanged();
            }

            UpdateCurrentValueAsString();
        }
Example #20
0
        /// <inheritdoc />
        protected override bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage)
        {
            if (string.IsNullOrEmpty(value) || value == EmptyValue)
            {
                validationErrorMessage = string.Format(EmptyErrorMessage, Label);
                result = default;
                return(false);
            }
            else if (typeof(TValue) == typeof(string))
            {
                result = (TValue)(object)value;
                validationErrorMessage = null;
                return(true);
            }
            else if (typeof(TValue).IsEnum)
            {
                var success = BindConverter.TryConvertTo <TValue>(value, CultureInfo.CurrentCulture, out var parsedValue);
                if (success)
                {
                    result = parsedValue;
                    validationErrorMessage = null;
                    return(true);
                }
                else
                {
                    result = default;
                    validationErrorMessage = $"The {FieldIdentifier.FieldName} field is not valid.";
                    return(false);
                }
            }
            else if (BindConverter.TryConvertTo(value, CultureInfo.InvariantCulture, out result))
            {
                validationErrorMessage = null;
                return(true);
            }
            else
            {
                validationErrorMessage = string.Format(ParsingErrorMessage, FieldIdentifier.FieldName);
                return(false);
            }

            throw new InvalidOperationException($"{GetType()} does not support the type '{typeof(TValue)}'.");
        }
        /// <summary>
        /// Method is called via EventCallBack if the keyboard key is no longer pressed inside the Input element.
        /// </summary>
        /// <param name="e">Contains the key (combination) which was pressed inside the Input element</param>
        /// <param name="index">Refers to picker index - 0 for starting date, 1 for ending date</param>
        protected async Task OnKeyUp(KeyboardEventArgs e, int index)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }

            var key = e.Key.ToUpperInvariant();

            if (key == "ENTER")
            {
                var input = (index == 0 ? _inputStart : _inputEnd);
                if (string.IsNullOrWhiteSpace(input.Value))
                {
                    ClearValue(index);
                }
                else
                {
                    if (BindConverter.TryConvertTo(input.Value, CultureInfo, out DateTime changeValue))
                    {
                        var array = Value as Array;
                        array.SetValue(changeValue, index);
                    }
                    if (index == 0)
                    {
                        await Blur(0);
                        await Focus(1);
                    }
                    else
                    {
                        Close();
                    }
                }
            }
            if (key == "ARROWDOWN" && !_dropDown.IsOverlayShow())
            {
                await _dropDown.Show();
            }
            if (key == "ARROWUP" && _dropDown.IsOverlayShow())
            {
                Close();
            }
        }
Example #22
0
        /// <summary>
        /// Renders the component to the supplied RenderTreeBuilder.
        /// </summary>
        /// <param name="builder">A RenderTreeBuilder that will receive the render output.</param>
        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            builder.OpenElement(0, "input");
            builder.AddMultipleAttributes(1, AdditionalAttributes);
            builder.AddAttribute(2, "type", "text");
            builder.AddAttribute(3, "class", CssClass);
            builder.AddAttribute(4, "value", BindConverter.FormatValue(CurrentValueAsString));
            builder.AddAttribute(5, "onchange", EventCallback.Factory.CreateBinder <String>(this, __value => CurrentValueAsString = __value, CurrentValueAsString));
            if (this.BrowserInputMode == BrowserInputMode.Decimal)
            {
                builder.AddAttribute(6, "inputmode", "decimal");
            }
            else if (this.BrowserInputMode == BrowserInputMode.Numeric)
            {
                builder.AddAttribute(6, "inputmode", "numeric");
            }

            builder.CloseElement();
        }
Example #23
0
 /// <inheritdoc />
 protected override bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage)
 {
     if (string.IsNullOrEmpty(value))
     {
         validationErrorMessage = null;
         result = default;
         return(true);
     }
     else if (BindConverter.TryConvertTo(value, CultureInfo.InvariantCulture, out result))
     {
         validationErrorMessage = null;
         return(true);
     }
     else
     {
         validationErrorMessage = string.Format(ParsingErrorMessage, FieldIdentifier.FieldName);
         return(false);
     }
 }
        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            builder.OpenElement(0, "select");
            builder.AddMultipleAttributes(1, AdditionalAttributes);
            builder.AddAttribute(2, "class", CssClass);
            builder.AddAttribute(3, "value", BindConverter.FormatValue(CurrentValueAsString));
            builder.AddAttribute(4, "onchange", EventCallback.Factory.CreateBinder <string>(this, value => CurrentValueAsString = value, CurrentValueAsString));

            if (_database != null)
            {
                var i = 5;
                if (IsOptional)
                {
                    builder.OpenElement(i++, "option");
                    builder.CloseElement();
                }

                foreach (var group in _database.Categories.GroupBy(c => c.GroupName).OrderBy(g => g.Key))
                {
                    if (group.Key != null)
                    {
                        builder.OpenElement(i++, "optgroup");
                        builder.AddAttribute(i++, "label", group.Key);
                    }

                    foreach (var category in group.OrderBy(c => c.Name))
                    {
                        builder.OpenElement(i++, "option");
                        builder.AddAttribute(i++, "value", category.Id.ToStringInvariant());
                        builder.AddContent(i++, category.Name);
                        builder.CloseElement();
                    }

                    if (group.Key != null)
                    {
                        builder.CloseElement();
                    }
                }
            }

            builder.CloseElement();
        }
        protected override bool TryParseValueFromString(string value, out TValue result, out string errorMessage)
        {
            var success = BindConverter.TryConvertTo <TValue>(
                value, CultureInfo.CurrentCulture, out var parsedValue);

            if (success)
            {
                result       = parsedValue;
                errorMessage = null;

                return(true);
            }
            else
            {
                result       = default;
                errorMessage = $"Invalid data.";

                return(false);
            }
        }
Example #26
0
        /// <inheritdoc />
        protected override bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage)
        {
            var targetType = Nullable.GetUnderlyingType(typeof(TValue)) ?? typeof(TValue);

            if (typeof(TValue) == typeof(string))
            {
                result = (TValue)(object)value;
                validationErrorMessage = null;
                return(true);
            }
            else if (targetType == typeof(Guid))
            {
                result = (TValue)(object)Guid.Parse(value);
                validationErrorMessage = null;
                return(true);
            }
            else if (targetType == typeof(int))
            {
                result = (TValue)(object)int.Parse(value);
                validationErrorMessage = null;
                return(true);
            }
            else if (typeof(TValue).IsEnum)
            {
                var success = BindConverter.TryConvertTo <TValue>(value, CultureInfo.CurrentCulture, out var parsedValue);
                if (success)
                {
                    result = parsedValue;
                    validationErrorMessage = null;
                    return(true);
                }
                else
                {
                    result = default;
                    validationErrorMessage = $"The {FieldIdentifier.FieldName} field is not valid.";
                    return(false);
                }
            }

            throw new InvalidOperationException($"{GetType()} does not support the type '{typeof(TValue)}'.");
        }
Example #27
0
        /// <inheritdoc />
        protected override bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage)
        {
            CultureInfo culture = CultureInfo.CurrentCulture;

            string workingValue = value;

            // replace . with ,
            if ((culture.NumberFormat.NumberDecimalSeparator == ",") &&          // when decimal separator is ,
                (culture.NumberFormat.NumberGroupSeparator != "."))                    // and . is NOT used as group separator)
            {
                workingValue = workingValue.Replace(".", ",");
            }

            // omezení počtu desetinných míst
            // pro komplikace s tím, že máme TValue a s ním se dost těžko pracuje se omezíme na řešení a úpravu vstupních dat před konverzí do cílového typu

            if (Decimal.TryParse(value, IsTValueIntegerType ? NumberStyles.Integer : NumberStyles.Float, culture, out decimal parsedValue))
            {
                workingValue = Math.Round(parsedValue, DecimalsEffective, MidpointRounding.AwayFromZero).ToString(culture);
            }

            // konverze do cílového typu

            if (BindConverter.TryConvertTo <TValue>(workingValue, culture, out result))
            {
                // pokud došlo jen ke změně bez změny hodnoty (třeba z 5.50 na 5.5), chceme hodnotu převést na korektní formát (5.5 na 5.50).
                // Nestačí však StateHasChange, viz komentář v BuildRenderInput.
                if (FormatValueAsString(result) != value)
                {
                    forceRenderValue = true;
                }

                validationErrorMessage = null;
                return(true);
            }
            else
            {
                validationErrorMessage = GetParsingErrorMessage();
                return(false);
            }
        }
Example #28
0
        protected void OnInput(ChangeEventArgs args, int index = 0)
        {
            if (args == null)
            {
                return;
            }

            if (BindConverter.TryConvertTo(args.Value.ToString(), CultureInfo, out TValue changeValue))
            {
                Value[index] = changeValue;

                GetIfNotNull(changeValue, (notNullValue) =>
                {
                    _pickerValues[index] = notNullValue;
                });

                StateHasChanged();
            }

            UpdateCurrentValueAsString();
        }
Example #29
0
        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            builder.OpenElement(0, "select");
            builder.AddMultipleAttributes(1, AdditionalAttributes);
            builder.AddAttribute(2, "class", CssClass);
            builder.AddAttribute(3, "value", BindConverter.FormatValue(CurrentValueAsString));
            builder.AddAttribute(4, "onchange", EventCallback.Factory.CreateBinder <string>(this, value => CurrentValueAsString = value, CurrentValueAsString, null));

            var i        = 5;
            var enumType = GetEnumType();

            foreach (TEnum value in Enum.GetValues(enumType))
            {
                builder.OpenElement(i++, "option");
                builder.AddAttribute(i++, "value", value.ToString());
                builder.AddContent(i++, GetDisplayName(value));
                builder.CloseElement();
            }

            builder.CloseElement();
        }
        public override void ChangeValue(DateTime value, int index = 0)
        {
            if (index != 0)
            {
                throw new ArgumentOutOfRangeException("DatePicker should have only single picker.");
            }
            UseDefaultPickerValue[0] = false;
            bool result = BindConverter.TryConvertTo <TValue>(
                value.ToString(CultureInfo), CultureInfo, out var dateTime);

            if (result)
            {
                CurrentValue = dateTime;
            }

            _pickerStatus[0]._hadSelectValue = true;

            UpdateCurrentValueAsString();

            if (IsRange && !IsShowTime && Picker != DatePickerType.Time)
            {
                if (_pickerStatus[0]._hadSelectValue && _pickerStatus[1]._hadSelectValue)
                {
                    Close();
                }
            }
            else if (!IsShowTime && Picker != DatePickerType.Time)
            {
                Close();
            }

            if (OnChange.HasDelegate)
            {
                OnChange.InvokeAsync(new DateTimeChangedEventArgs
                {
                    Date       = value,
                    DateString = GetInputValue(0)
                });
            }
        }