Xaml 加载ViewModel时绑定选择器和日期选择器上的默认值

Xaml 加载ViewModel时绑定选择器和日期选择器上的默认值,xaml,xamarin,mvvm,xamarin.forms,prism,Xaml,Xamarin,Mvvm,Xamarin.forms,Prism,我想在DatePicker上设置所选日期,在ViewModel类加载时设置Picker上的所选项目。我是怎么做的 public override void OnNavigatedTo(INavigationParameters parameters) { base.OnNavigatedTo(parameters); var objL = parameters.GetValue<LeaveManagement>("LeaveItem"); SelectedFr

我想在
DatePicker
上设置所选日期,在
ViewModel
类加载时设置
Picker
上的所选项目。我是怎么做的

public override void OnNavigatedTo(INavigationParameters parameters)
{
    base.OnNavigatedTo(parameters);
    var objL = parameters.GetValue<LeaveManagement>("LeaveItem");
    SelectedFromDate = objL.StartDate;
    SelectedToDate = objL.EndDate;
    SelectedLeaveType = new SpinnerBind { Name = objL.LeaveTypeCD, Value = objL.LeaveTypeId };           
}

private DateTime? _selectedFromDate;
public DateTime? SelectedFromDate
{
    get { return _selectedFromDate; }
    set { _selectedFromDate = value; }
}
private DateTime? _selectedToDate;
public DateTime? SelectedToDate
{
    get { return _selectedToDate; }
    set { _selectedToDate = value; }
}

private ObservableCollection<SpinnerBind> _leaveType;
public ObservableCollection<SpinnerBind> LeaveType
{
    get { return _leaveType; }
    set
    {
        SetProperty(ref _leaveType, value);
    }
}
private SpinnerBind _selectedLeaveType;
public SpinnerBind SelectedLeaveType
{
    get { return _selectedLeaveType; }
    set
    {
        SetProperty(ref _selectedLeaveType, value);
    }
}
public override void OnNavigatedTo(INavigationParameters)
{
base.OnNavigatedTo(参数);
var objL=parameters.GetValue(“leveItem”);
SelectedFromDate=objL.StartDate;
SelectedToDate=objL.EndDate;
SelectedLeaveType=new SpinnerBind{Name=objL.LeaveTypeCD,Value=objL.LeaveTypeId};
}
私人约会时间_选择FromDate;
公共约会时间?SelectedFromDate
{
获取{return\u selectedFromDate;}
设置{u selectedFromDate=value;}
}
私人约会时间_选择碘化钾;
公共约会时间?选择的盐酸盐
{
获取{return\u selectedToDate;}
设置{u selectedToDate=value;}
}
私有可观测集合类型;
公共可观测集合类型
{
获取{return\u leaveType;}
设置
{
SetProperty(参考类型、值);
}
}
私有SpinnerBind _selectedLeaveType;
公共SpinnerBind SelectedLeaveType
{
获取{return\u selectedLeaveType;}
设置
{
SetProperty(ref\u selectedLeaveType,value);
}
}
这是我的XAMl

<RelativeLayout>
    <DatePicker Format="dd/MM/yyyy"   Date="{Binding SelectedFromDate}"/>

    <DatePicker  Format="dd/MM/yyyy" Date="{Binding SelectedToDate}"/>

    <Picker SelectedItem="{Binding SelectedLeaveType, Mode=TwoWay}" ItemsSource="{Binding LeaveType,Mode=TwoWay}"
            TitleColor="Black" TextColor="Black" Title="--Select--"/>
</RelativeLayout>


但未设置Startdate、Enddate和SelectedLeaveType的所有值。但是,
Picker
LeaveType
绑定,如何解决此问题?

当视图模型的属性更改时,它需要引发
INotifyPropertyChanged.PropertyChanged
,以更新绑定

Prism为视图模型提供了
BindableBase
基类,它有一个
SetProperty
方法,通常用于更新备份字段并在需要时引发事件

就是说,你想要这样的东西吗

public DateTime? SelectedFromDate
{
    get { return _selectedFromDate; }
    set { SetProperty( ref _selectedFromDate, value ); }
}

编辑:若要将
选取器
与默认选定项绑定,请从中初始化
SelectedLeaveType

因此,您需要的是加载页面时选取器和日期选取器中的默认值?是的,在日期选取器上,我需要在ViewModel加载时设置日期和选取器上的选定项,
OnNavigatedTo
方法的三个值需要绑定。它到底发生了什么问题?Picker显示为--Select--DatePicker显示为today date。好的,让我回答这个问题,给我一分钟时间,这些属性在ViewModel还是模型中?在问题中,设置了
{{u selectedFromDate=value;}
,这显然不会引发事件。然而,我们有
SetProperty(ref\u leaveType,value)
这显然是多余的,因为它是一个
可观察的集合
并且应该根本没有setter。除非
SpinnerBind
定义了自己的相等规则,否则我不希望在items列表中找到一个
新的
ed实例……默认情况下,使用
ReferenceEquals