Проблема с датчиками в Silverlight 4 - PullRequest
2 голосов
/ 26 февраля 2011

У меня есть два выбора даты - один для «От» и другой для «До».У меня есть требование изменить дату «Дата» на дату «С», если дата «Дата начала» становится больше, чем дата «На», и наоборот.В настоящее время заданное свойство срабатывает дважды, если я фокусируюсь на текстовом поле Дата до после выбора даты От, тем самым сбрасывая правильную дату.Однако, если я выберу дату из календаря вместо ее ввода, она будет работать нормально.

Вот мой xaml:

    <Grid Grid.Row="1" VerticalAlignment="Top" BindingValidationError="dateVisitStartFrom_BindingValidationError">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="1" Orientation="Horizontal">
            <TextBlock Text="From: "></TextBlock>
            <basics:DatePicker VerticalAlignment="Top" Height="20" x:Name="dateVisitStartFrom" SelectedDate="{Binding VisitStartDateFrom,Mode=TwoWay,NotifyOnValidationError=True,ValidatesOnExceptions=True}" Style="{StaticResource DatePickerStyle1}" >
                <!--<interactivity:Interaction.Triggers>
                    <interactivity:EventTrigger EventName="BindingValidationError">
                        <MVVMLight:EventToCommand Command="{Binding RectifyDateValidationErrorCommand}"></MVVMLight:EventToCommand>
                    </interactivity:EventTrigger>
                </interactivity:Interaction.Triggers>-->
            </basics:DatePicker>

            <TextBlock Text="To: " Margin="10,0,0,0"></TextBlock>
            <basics:DatePicker x:Name="dateVisitStartTo" VerticalAlignment="Top" Height="20" SelectedDate="{Binding VisitStartDateTo,Mode=TwoWay,NotifyOnValidationError=True,ValidatesOnExceptions=True}" Style="{StaticResource DatePickerStyle1}"></basics:DatePicker>
        </StackPanel>
    </Grid>

Вот виртуальная машина:

private DateTime visitStartDateFrom = System.DateTime.Now.Subtract(new TimeSpan(7,0,0,0));
    public DateTime VisitStartDateFrom
    {
        get
        {
            return visitStartDateFrom;
        }
        set
        {

            visitStartDateFrom = value;

            if (visitStartDateFrom > visitStartDateTo)
            {
                throw new Exception();
                //visitStartDateTo = visitStartDateFrom;
                //OnPropertyChanged("VisitStartDateTo");
            }

            //OnPropertyChanged("VisitStartDateFrom");

        }
    }




    private DateTime visitStartDateTo = System.DateTime.Now;
    public DateTime VisitStartDateTo
    {
        get
        {
            return visitStartDateTo;
        }
        set
        {

            {

                visitStartDateTo = value;
                if (visitStartDateFrom > visitStartDateTo)
                {
                    //visitStartDateFrom = visitStartDateTo;
                    //OnPropertyChanged("VisitStartDateFrom");
                    throw new Exception();
                }
                //OnPropertyChanged("VisitStartDateTo");

            }
        }
    }

И вот здесь в коде есть функция bindingvalidationerror.

 private void dateVisitStartFrom_BindingValidationError(object sender, ValidationErrorEventArgs e)
    {
        if (e.Action == ValidationErrorEventAction.Added)
        {

            if (((DatePicker)e.OriginalSource).Name == "dateVisitStartFrom")
            {
                dateVisitStartFrom.Focus();
                this.UpdateLayout();
                dateVisitStartTo.SelectedDate = ((DatePicker)e.OriginalSource).SelectedDate;
            }
            else
            {
                dateVisitStartFrom.SelectedDate = ((DatePicker)e.OriginalSource).SelectedDate;
            }

        }
    }

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

1 Ответ

0 голосов
/ 10 июля 2011

Вот что я попробовал, и я думаю, что он достиг того, что вы ищете.

XAML:

<sdk:DatePicker SelectedDate="{Binding FromDate,Mode=TwoWay}" />
<sdk:DatePicker SelectedDate="{Binding ToDate,Mode=TwoWay}"/>

Код:

    private DateTime _FromDate= DateTime.Today.AddDays(-1);
    public DateTime FromDate
    {
        get { return _FromDate; }
        set
        {
            if (_FromDate != value)
            {
                _FromDate = value;
                if (value > _ToDate)
                {
                    _ToDate = value;
                    OnPropertyChanged("ToDate");
                }
            }
            OnPropertyChanged("FromDate");
        }
    }

    private DateTime _ToDate = DateTime.Today;
    public DateTime ToDate
    {
        get { return _ToDate; }
        set
        {
            if (_ToDate != value)
            {
                _ToDate = value;
                if (value < _FromDate)
                {
                    _FromDate = value;
                    OnPropertyChanged("FromDate");
                }
            }
            OnPropertyChanged("ToDate");

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