Xamarin.Forms TimePicker" Time"绑定不可设置?

时间:2017-09-27 13:04:06

标签: c# xamarin xamarin.forms

在多个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

2 个答案:

答案 0 :(得分:0)

尝试使用此代码从ViewModel设置属性,以确保它由UI线程设置:

Device.BeginInvokeOnMainThread(() => SaveTime = yourTimeSpan);

如果,不是,那么你可以在你设置属性的地方发帖吗?

答案 1 :(得分:0)

好的,对我感到羞耻。我有TimePickerExtendedTimePicker的自定义渲染器修复了旧版Xamarin.Forms中的另一个错误,TimePickerDialog始终为12H格式,无论我是什么以格式输入。从我的代码中删除类后,一切正常。