如何使用日期选择器将所选日期绑定到xamarin表单中的viewmodel

时间:2017-12-14 09:03:20

标签: c# datepicker xamarin.forms

我有一个DatePicker如下:

<DatePicker x:Name="MyDatePicker" Grid.Row="0" Grid.Column="1" HorizontalOptions="Center" VerticalOptions="Center" Date="{Binding BookingDate}" Format="dd/MM/yyyy" />

我希望在我的ViewModel中获得一个新选择的日期,但是当我为DateSelected添加绑定时:

DateSelected="{Binding MyViewModelJob}"

它不起作用(带有DatePicker的页面甚至无法打开)。

我应该在XAML和我的ViewModel中做些什么来获取日期?

2 个答案:

答案 0 :(得分:1)

DateSelected不是可绑定属性,它是DatePicker类型的Event。如果要通过viewmodel上的属性更改日期,则只需更改“PreviewDate”属性,该属性已附加到DatePicker的Date属性。

下面是一些伪代码:

public class YourViewModel : INotifyPropertyChanged //Implement INPC to update the view when a property changes
{

    private DateTime bookingDate;
    public DateTime BookingDate 
    {
        get { return bookingDate; }
        set 
        { 
            bookingDate = value;
            OnPropertyChanged("BookingDate");   //Call INPC Interface when property changes, so the view will know it has to update
        }
    }

    private void ChangeDate(DateTime newDate)
    {
        BookingDate = newDate;  //Assing your new date to your property
    }
}

答案 1 :(得分:1)

在DatePicker中是Date。这是可绑定的属性。

在XAML中:

<DatePicker
         HeightRequest="40"
         Date ="{Binding StartDate}" 
/>

在ViewModel中你可以写:

public class YourViewModel : INotifyPropertyChanged 
{
    DateTime _startdate;
    public DateTime StartDate
    {
        get
        {   
                return _startdate;
        }
        set
        {
            _startdate = value;
            RaisePropertyChanged("StartDate");

        }
    }
    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

在此之后,您可以在所有ViewModel中使用StartDate,这样您就可以获取或设置日期。