Проблемы управления календарем в WPF C # - PullRequest
2 голосов
/ 18 октября 2011

Я пытаюсь привязать TextBox к выбранной дате в элементе управления Calendar, и при его инициализации проблем не возникает.Проблема в том, что после того, как я изменю выбранную дату, TextBox останется в своем первоначальном значении (сегодня).Я пробовал 3 метода, в том числе просто вернуться к TextBox.Text = Calendar.DisplayDate.ToString (), но проблема остается.

Кто-нибудь знает, что является причиной, или как ее обойти?

Обратите внимание, что PropertyChanged не равен нулю в методе 2.

Мой код выглядит следующим образом, среализованы два других метода:

XAML:

<Calendar Grid.Column="1" Height="170" HorizontalAlignment="Left" Name="calStart" VerticalAlignment="Top"  Width="180" IsTodayHighlighted="False" SelectedDatesChanged="CalStartSelectedDatesChanged">
            <Calendar.CalendarDayButtonStyle>
                <Style>
                    <Style.Triggers>
                    <DataTrigger Binding="{Binding Converter={StaticResource conv}}" Value="1">
                            <Setter Property="Button.Background" Value="LightGreen" />

                        </DataTrigger>
                </Style.Triggers>
                </Style>
            </Calendar.CalendarDayButtonStyle>
     </Calendar>
 <TextBox Height="23" HorizontalAlignment="Left" Margin="34,33,0,0" Text="{Binding StartBindProp, Mode=OneWay}" Name="txtStartDate" VerticalAlignment="Top" Width="120" Grid.Column="1" Grid.Row="1" />

C # Метод 1:

private void CalStartSelectedDatesChanged(object sender, SelectionChangedEventArgs e)
    {
        StartBindProp = calStart.DisplayDate.ToString();
    }


    public string StartBindProp
    {
        get { return (string)GetValue(StartBindPropProperty); }
        set { SetValue(StartBindPropProperty, value); }
    }

    // Using a DependencyProperty as the backing store for StartBindProp.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty StartBindPropProperty =
        DependencyProperty.Register("StartBindProp", typeof(string), typeof(MainControl), new UIPropertyMetadata(""));

Метод 2:

 private void CalEndSelectedDatesChanged(object sender, SelectionChangedEventArgs e)
    {
        EndBind = calEnd.DisplayDate.ToString();
    }

    private string m_EndBind = "endtest";


    public string EndBind
    {
        get { return m_EndBind; }
        set
        {
            m_EndBind = value;

            if (null != PropertyChanged)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("EndBind"));
            }
        }
    }

Спасибо заhelp!

РЕДАКТИРОВАТЬ: следующий xaml имеет ту же проблему (и, по-видимому, делает календарь только для чтения):

<TextBox Text="{Binding ElementName=calStart, Path=DisplayDate, Mode=OneWay}" />

1 Ответ

1 голос
/ 18 октября 2011

Используйте Calendar.SelectedDate (или SelectedDates, если несколько) вместо DisplayDate

Я полагаю, что DisplayDate используется для определения того, какая дата имеет «выбранный» контур вокруг нее в календаре (поскольку можно выбрать несколько дат), тогда как SelectedDate является фактическим значением элемента управления.

Документы MSDN можно найти в элементе управления Calendar здесь

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