如何在Xamarin中添加DatePicker的最小日期验证检查

时间:2017-07-15 19:12:05

标签: c# user-interface xamarin datepicker xamarin.forms

我有两个DatePicker(名为fromdate和todate)和一个按钮(名为save)。

默认情况下,今天的日期将同时填入DatePicker。我添加了最小日期验证(用户只能选择今天或更长的日期。

如果今天的日期是5月30日,并且用户从fromdate选择6月15日并点击确定。现在,默认的今天日期显示在todate中。 我希望进行验证,例如,如果用户在fromdate中选择了6月15日,然后点击确定,则todate应填充fromdate

2 个答案:

答案 0 :(得分:5)

这可以通过将toDate DatePicker的MinimumDate绑定到FromDate属性来完成。

我不知道你的代码所以我会给你一个例子:

想象一下你有这样的XAML:

<?xml version="1.0" encoding="utf-8"?>
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-YourProject" 
    x:Class="YourProject.YourClass">

    <StackLayout>
        <DatePicker Date="{Binding FromDate}" MinimumDate="{Binding FromMiminumDate}" />

        <DatePicker Date="{Binding ToDate}" MinimumDate="{Binding FromDate}" />
    </StackLayout>
</ContentPage>

你有一个像这样的ViewModel:

public class YourViewModel : INotifyPropertyChanged
{
    public YourViewModel ()
    {
        FromMiminumDate = DateTime.Today;
    }

    private DateTime _fromDate;
    public DateTime FromDate
    {
        get { return _fromDate; }
        set
        {
            if (_fromDate == value)
                return;

            _fromDate = value;
            NotifyPropertyChanged (nameof(FromDate));
        }
    }

    private DateTime _toDate;
    public DateTime ToDate
    {
        get { return _toDate; }
        set
        {
            if (_toDate == value)
                return;

            _toDate = value;
            NotifyPropertyChanged (nameof(ToDate));
        }
    }

    private DateTime _fromMiminumDate;
    public DateTime FromMiminumDate
    {
        get { return _fromMiminumDate; }
        set
        {
            if (_fromMiminumDate == value)
                return;

            _fromMiminumDate = value;
            NotifyPropertyChanged (nameof(FromMiminumDate));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    void NotifyPropertyChanged (string propertyName)
    {
        PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
    }
}

这样,每次更改FromDate Picker中选择的日期时,ToDate Picker的MinimumDate也会更改。

当然,后面的XAML代码将简单如下:

public YourClass ()
{
    var VM = new YourViewModel ();

    InitializeComponent ();

    BindingContext = VM;
}

希望这有帮助。

答案 1 :(得分:1)

因此,您有两个DatePicker:fromDate和toDate。

您可以在fromDate中添加一个称为“ PropertyChanged”的属性:

<DatePicker
x:Name="fromDate"
PropertyChanged="FromDate_Changed"
/>

<DatePicker
x:Name="toDate"
/>

现在,您可以进入xaml.cs文件并将以下内容添加到构造函数中:

public ItemsPage()
{
    InitializeComponent();
    fromDate.MinimumDate = DateTime.Now;
    toDate.MinimumDate = DateTime.Now;
}

现在使用两个DatePicker,您都必须选择一个非过去的日期。

然后,您可以创建方法“ FromDate_Changed”(如果尚未自动创建):

private void FromDate_Changed(object sender, PropertyChangedEventArgs e)
{
    toDate.MinimumDate = fromDate.Date;
}

现在,每次从fromDate选择器更改日期时,从toDate的最小日期将自动更改为在fromDate中选择的日期。

我知道这个问题已经2岁了,但是将来如果有人正在寻找确切的问题,他会找到一个更简单的解决方案。

请问我的英语。