【问题标题】:WPF DateTimePicker not setting date after validationWPF DateTimePicker 验证后未设置日期
【发布时间】:2011-07-11 20:36:36
【问题描述】:

我正在尝试在日期时间选择器控件中验证所选日期,如果所选日期为 > Datetime.Today,则将其设置为今天的日期。我面临的问题是我无法设置 SelectedDate通过 xaml 获取 datetimepicker 控件的属性。我觉得我的绑定有问题,请您帮忙?

以下是代码。请你告诉我我做错了什么?

  <Controls:DatePicker Height="20"
                                 Grid.Row="0"
                                 Grid.Column="0"
                                 Grid.ColumnSpan="2"
                                 x:Name="dateControl"
                                 IsTodayHighlighted="True"
                                 Margin="5,10,5,20"
                                 SelectedDate="{Binding Path=BindingDate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>

public class Context : INotifyPropertyChanged
    {
        public Context() { }

        private DateTime bindingDate = DateTime.Today;
        public DateTime BindingDate
        {
            get
            {
                return bindingDate;
            }
            set
            {
                if (DateTime.Compare(DateTime.Today, value) < 0)
                {
                    MessageBox.Show("Please Select Today date or older, Should not select future date");

//这在控件的SelectedDate属性中没有任何时候体现,为什么??? 值 = 日期时间。今天; } 绑定日期 = 值; OnPropertyChanged("绑定日期"); } }

..是的,我正在设置窗口的数据上下文,如下所示:

public Window1()
        {
            InitializeComponent();
            this.DataContext = new Context(); 
        }

任何建议都将受到高度赞赏。

谢谢, -迈克

【问题讨论】:

    标签: wpf binding wpftoolkit


    【解决方案1】:

    这是因为如果您为局部变量 bindingDate 设置值,则永远不会调用 BindingDate 设置器,并且永远不会通知您的 ui。

    而不是设置

    private DateTime bindingDate = DateTime.Today.AddDays(13);
    

    尝试设置

     BindingDate = DateTime.Today.AddDays(13);
    

    编辑

    但是,即使在显示消息框后,在日期选择器中选择未来的日期也会保留,因为选择已经在控件中进行并且不会重置。

    但您可以考虑其他替代方法,例如通过使用日期选择器的 BlackoutDatesDisplayDates 属性阻止所有未来日期的选择,或者您可以考虑使用下面帖子中提到的自定义验证规则

    Date picker validation WPF

    【讨论】:

    • 我的问题是,如果我在控件中选择一个未来的日期,比如 2011 年 12 月 20 日,即使在绑定属性中添加了验证,控件也会将日期设置为 2011 年 12 月 20 日。我的问题是,为什么 DatetimePicker 的 selecteddate 没有选择验证后设置的日期(即 Datetime.Today)?
    【解决方案2】:

    您也可以考虑实现 INotifyPropertyChanging,而不仅仅是 INotifyPropertyChanged。 通过这种方式,您还可以通知您的属性即将更改,并相应地运行一些代码。 当然,还要通知您的财产已经有效地改变了。

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多