В TextBox "ожидаемый формат - ДД / ММ / ГГГГ" в WPF + MVVM + Binding + UserInput - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь ввести в текстовое поле действительную дату в указанном формате. Может ли кто-нибудь помочь мне проверить, введена ли в текстовом поле дата, является ли она действительной датой в формате ДД / ММ / ГГГГ?

Если это недопустимая дата, введенная пользователем, то после нажатия клавиши табуляции (щелкните снаружи из текстового поля) должно появиться сообщение: дата введена неправильно.

Просмотр модели:

приватный DateTime? _txtDateDeRec;

    public DateTime? TxtDateDeRec
    {
        get
        {
            return this._txtDateDeRec;
        }
        set
        {
            this._txtDateDeRec = value;
            OnPropertyChanged("TxtDateDeRec");
        }
    }

XAML код:

TextBox x: Name = "txtDateDeRec" HorizontalAlignment = "Left" Height = "23" Margin = "555,65,0,0" TextWrapping = "Wrap" Text = "{Binding TxtDateDeRec}" VerticalAlignment = "Top" Ширина = "163"

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Для проверки формата даты и времени можно использовать правило проверки в привязке к текстовому полю.

public class DateValidation : ValidationRule 
    { 
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
        { 
            ValidationResult result; 
            try 
            { 
               Regex regex = new Regex(@"^([0]?[0-9]|[12][0-9]|[3][01])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$");

               DateTime? date;

               //Verify whether date entered in dd/mm/yyyy format.
               bool isValid = regex.IsMatch(value.ToString());

               //Verify whether entered date is Valid date.       
               isValid = isValid && DateTime.TryParseExact(value.ToString(), "dd/MM/yyyy", new CultureInfo("en-GB"), DateTimeStyles.None, out date);                                                                                                             

               result = isValid ? new ValidationResult(true,null) : new ValidationResult(false,"Date wrongly entered");  
            }catch(Exception ) 
            { 
                result = new ValidationResult(false,"Date wrongly entered"); 
            } 
            return result; 
        } 
    } 

Для текстового поля добавьте правило проверки, как показано ниже

<TextBox  x:Name="txtDateDeRec" HorizontalAlignment="Left" Height="23" Margin="555,65,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="163">
    <TextBox.Text>
        <Binding Path="TxtDateDeRec" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:DateValidation/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
0 голосов
/ 12 сентября 2018
        textBox1.Leave += new EventHandler((sender2, ee) => 
        {
            var textBox = (Control)sender2;
            var date = new DateTime();
            if(DateTime.TryParse(textBox.Text,out date))
            {
                textBox.Text= String.Format("{0:dd/MM/yyyy}", date);
            }
            else
            {
                textBox.Text = "date wrongly entered.";
            }

        });

Обновление 1: только формат ДД / ММ / ГГГ

textBox1.Leave += new EventHandler((sender2, ee) => 
            {
                var textBox = (Control)sender2;
                var date = new DateTime();
                var testResult = DateTime.TryParse(textBox.Text, out date);
                var dateToString = String.Format("{0:dd/MM/yyyy}", date);
                if(testResult==true && textBox.Text.Trim() == dateToString)//Format is the same
                {

                    textBox.Text =dateToString ;
                }

                else
                {
                    textBox.Text = "date wrongly entered.";
                }

            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...