在多个Views
我有TimePickers
我想要设置到某个时间,但他们总是显示00:00
。
它们的设置如下:
<controls:ExtendedTimePicker VerticalOptions="FillAndExpand"
HorizontalOptions="EndAndExpand"
TextColor="#FFFFFF"
Time="{Binding SaveTime, Mode=TwoWay}" />
或者喜欢这个:
<TimePicker Grid.Row="1"
Grid.Column="1"
Format="HHmm"
Time="{Binding SaveTime, Mode=TwoWay}"
BackgroundColor="#FFFFFF" />
为了澄清,ExtendedTimePicker
来自Xlabs.Forms
库。它继承自TimePicker
,它有同样的问题。我也尝试了所有绑定模式,但所有绑定模式都得到00:00
的结果。
在我的ViewModels
中,我试图在构造函数中设置绑定属性,将其延迟几百毫秒,或者在收到来自MessagingCenter
的特定消息时设置它。无论何时设置,显示的时间都不会改变。在将Property设置为特定时间后,将访问bound属性的getter
该属性定义为:
private TimeSpan _SaveTime;
public TimeSpan SaveTime
{
get { return _SaveTime; }
set { SetProperty(ref _SaveTime, value); }
}
SetProperty
导致了这一点:
public abstract class ViewModelBase : IViewModel, IDisposable
{
protected virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (object.Equals(storage, value)) return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var eventHandler = PropertyChanged;
if (eventHandler != null)
{
eventHandler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
那么,这是一个错误吗?有什么可以解决这个问题吗?解决方法?什么东西?也许更新?
我正在使用:
VisualStudio 2017 15.2
Xamarin 4.5.0
Xamarin.Forms 2.3.4.267
答案 0 :(得分:0)
尝试使用此代码从ViewModel设置属性,以确保它由UI线程设置:
Device.BeginInvokeOnMainThread(() => SaveTime = yourTimeSpan);
如果,不是,那么你可以在你设置属性的地方发帖吗?
答案 1 :(得分:0)
好的,对我感到羞耻。我有TimePicker
和ExtendedTimePicker
的自定义渲染器修复了旧版Xamarin.Forms中的另一个错误,TimePickerDialog
始终为12H
格式,无论我是什么以格式输入。从我的代码中删除类后,一切正常。