Xamarin.forms 即使尚未设置绑定属性,日期选择器也会选择所选内容
我拿到了我的Xamarin.forms 即使尚未设置绑定属性,日期选择器也会选择所选内容,xamarin.forms,Xamarin.forms,我拿到了我的日期选择器。我检查新提交日期是否等于或大于所选的订单.TargetDate.date。 如果条件不匹配,则检查本身是正常的,不允许检查,但是用户在日历上选择的内容将保留在日历中。为什么calendar设置用户的选择,即使SelectedTargetDate未更改 <DatePicker Date="{Binding SelectedTargetDate, Mode=TwoWay}"/> public DateTime SelectedTargetD
日期选择器
。我检查新提交日期是否等于或大于所选的订单.TargetDate.date。
如果条件
不匹配,则检查本身是正常的,不允许检查,但是用户
在日历
上选择的内容将保留在日历
中。为什么calendar
设置用户的选择,即使SelectedTargetDate
未更改
<DatePicker Date="{Binding SelectedTargetDate, Mode=TwoWay}"/>
public DateTime SelectedTargetDate
{
get => _selectedTargetDate;
set
{
if (SelectedOrder == null) return; //on program run first time it's null
if (value.Date < SelectedOrder.TargetDate.Date)
_pageService.DisplayAlert("Ostrzeżenie", "New date cannot be older than TargetDate", "ok", "cancel");
else
SetValue(ref _selectedTargetDate, value);
}
}
公共日期时间选定目标日期
{
get=>\您选择的目标日期;
设置
{
if(SelectedOrder==null)return;//在程序第一次运行时为null
if(value.Date
我不知道我是否正确理解您的意思,如果条件不满足,您是否希望保留所选的订单.TargetDate
如果是,您可以让您的模型实现INotifyPropertyChanged
并进行如下更改:
public class YourModel: INotifyPropertyChanged
{
...
public event PropertyChangedEventHandler PropertyChanged;
public DateTime SelectedTargetDate
{
get => _selectedTargetDate;
set
{
if (SelectedOrder == null) return; //on program run first time it's null
if (value.Date < SelectedOrder.Date)
{
_pageService.DisplayAlert("Ostrzeżenie", "New date cannot be older than TargetDate", "ok", "cancel");
}
else
{
_selectedTargetDate = value;
}
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SelectedTargetDate"));
}
}
}
公共类YourModel:INotifyPropertyChanged
{
...
公共事件属性更改事件处理程序属性更改;
公共日期时间选定目标日期
{
get=>\您选择的目标日期;
设置
{
if(SelectedOrder==null)return;//在程序第一次运行时为null
如果(value.Date
我已实现InotifyProperty更改,并且_selectedTargetDate仅在条件通过时更改-此部件完全工作。问题是,即使未传递cindition,也意味着当它转到引发_pageService.DisplayAlert的部分时-意味着它未将_selectedTargetDate设置为新值(未设置为_selectedTargetDate=value),但在gui(日期选择器日历)上仍设置了新选择。这就是我不明白的地方。@Arie,因为您错过了PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(“SelectedTargetDate”)
刷新SelectedTargetDate
如上所述。它将显示您在日历中选择的日期,如果您将日期绑定到SelectedTargetDate
,您应该在每次选择日期时更新它。您是对的,即使未更新,我也需要调用propertychanged。我不认为日历会设定日期,即使没有提出财产变更。你能给我解释一下这种行为吗?对我来说,逻辑上是当没有绑定属性被更改时,用户输入的新日期不应保留在calenadar中。@Arie您可以尝试将日期绑定到固定时间,当您在calenadar中选择日期时,它也将更改为新日期。