开发者

Date picker validation WPF

开发者 https://www.devze.com 2022-12-26 01:54 出处:网络
How to apply validations to WPF datepicker toolkit? I want it to error out if invalid date is selected and in some case I have Arrival and Departure dates, so I want to validate it to see开发者_Python

How to apply validations to WPF datepicker toolkit? I want it to error out if invalid date is selected and in some case I have Arrival and Departure dates, so I want to validate it to see开发者_Python百科 that the arrival date is not later than the departure date.


It seems a year above date picker validation was a problem. Anyway, now it works.

I am not a WPF specialist, bu I'll try to give you an idea

write a validation rule

public class DateExpiredRule : ValidationRule
{

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        DateTime orderDate = (DateTime)value;

        return new ValidationResult(orderDate < DateTime.Now, "Please, enter date before Now()");
    }
}

then you can attach it to datepicker

    <!-- since validation works hand by hand with binding, 
        I use hidden datepicker as binding source -->
    <WPFToolkit:DatePicker Name="dateProvider" Visibility="Collapsed">
    </WPFToolkit:DatePicker>

    <WPFToolkit:DatePicker Name="notExpired">
        <WPFToolkit:DatePicker.SelectedDate>
            <Binding ElementName="dateProvider" Path="SelectedDate" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <local:DateExpiredRule/>
                </Binding.ValidationRules>
            </Binding>
        </WPFToolkit:DatePicker.SelectedDate>
    </WPFToolkit:DatePicker>

specify control template when validation error occurs. By default validation error changes border color. I used additional tooltip when mouse is over control.

Date picker validation WPF

source code

About 'picker to picker' validation.

I know that one can use custom properties in validation rules (see AgeRangeRule in msdn example)

Maybe you should use this feature like this

<local:MaxDateRule MaxDate="{Binding ElementName=DepartureDatePicker, Path=SelectedDate" />

but in order to apply binding you need to make MaxDate a DependencyProperty .. you should definetly ask a guru ;)

Instead of highlighting you should consider intercepting the datepicker value change (via some kind of datepicker 'onchange' event) and accept or reject the change.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号