在wpf中更改日期选择日期与之前选择的日期

时间:2015-09-23 07:15:38

标签: c# .net wpf

尝试通过绑定属性来更改Datepicker上的Date。 如果我设置为DateTime.Now值。然后它工作。但是如果我将datepicker字段留空并失去焦点,我想设置为之前选择的日期。

    public DateTime? Date
    {
        get
        {
            return _previousChosenDateTime = Smilefjestilsyn.Dato;
        }
        set
        {
            if (value != null)
            {
                _previousChosenDateTime = value;
            }
        }
    }

XAML代码。

   <DatePicker Style="{StaticResource TabSkipableDatePicker}" 
                        Margin="-8,8,0,0" 
                        Background="Transparent" 
                        BorderBrush="Transparent" 
                        SelectedDate="{Binding Date, StringFormat=dd/MM/yyyy, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                        Grid.Row="6" 
                        Grid.Column="2"/>

1 个答案:

答案 0 :(得分:0)

1st:return _previousChosenDateTime = Smilefjestilsyn.Dato;总是返回Smilefjestilsyn.Dato所以你可能想要改变它。

毕竟,我相信你遇到的主要问题是&#34;显示&#34;当用户明确删除文本框中的所有内容和水印时,DatePicker的数据&#34;选择日期&#34;出现而不是渴望&#34; perivousdate&#34;。您可能需要绑定&#34; Text&#34; DatePicker的属性是为了正确

以下内容应该有效,但我想知道是否有更好的解决方案。它有点难看

public class MainViewModel : ViewModelBase
{
    private readonly DateTime _somePreviousDate = DateTime.Today.AddDays(-2);

    private DateTime? _startDateSelected;
    public DateTime? StartDateSelected
    {
        get
        {
            return _startDateSelected.HasValue ? _startDateSelected : _somePreviousDate;
        }
        set
        {
            _startDateSelected = value.HasValue ? value : _somePreviousDate;

            OnPropertyChanged("StartDateSelected");
            OnPropertyChanged("StartDateSelectedString");
        }
    }

    public string StartDateSelectedString
    {
        get { return StartDateSelected.ToString(); }
    }
}


        <DatePicker Height="25" HorizontalAlignment="Left" VerticalAlignment="Top" Width="115" 
                    SelectedDate="{Binding StartDateSelected, Mode=TwoWay}"
                    Text="{Binding StartDateSelectedString}">
        </DatePicker>