Подтверждение выбора даты WPF - PullRequest
9 голосов
/ 10 апреля 2010

Как применить проверки к инструментарию WPF datepicker? Я хочу, чтобы он выдавал ошибку, если выбрана неверная дата, и в некоторых случаях у меня есть даты прибытия и отъезда, поэтому я хочу проверить ее, чтобы убедиться, что дата прибытия не позднее даты отъезда.

1 Ответ

8 голосов
/ 11 апреля 2010

Кажется, год выше проверки выбора даты была проблема . Во всяком случае, теперь это работает.

Я не специалист по WPF, но постараюсь дать вам идею

написать правило проверки

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()");
    }
}

тогда вы можете прикрепить его к 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>

указать шаблон элемента управления при возникновении ошибки проверки. По умолчанию ошибка проверки изменяет цвет границы. Я использовал дополнительную всплывающую подсказку, когда мышь находится над контролем.

alt text

исходный код

О проверке сборщика.

Я знаю, что в правилах проверки можно использовать пользовательские свойства (см. AgeRangeRule в примере msdn )

Может быть, вы должны использовать эту функцию, как это

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

но для того, чтобы применить привязку, вам нужно сделать MaxDate DependencyProperty .. вы должны обязательно спросить гуру;)

Вместо выделения следует рассмотреть возможность перехвата изменения значения DatePicker (с помощью какого-либо события datepicker 'onchange') и принять или отклонить изменение.

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