繁体   English   中英

Xamarin.Forms C#属性未在Device.StartTimer中更新

[英]Xamarin.Forms C# property not updating in Device.StartTimer

我想创建一个倒计时所选时间的应用程序。 但是我有一个奇怪的问题,我不知道我在做什么错。

这是我的计时器,每次选择器的属性更改时都会调用它。 当我选择时间时,代码仅删除1秒钟,然后不再更新。

Picker.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == TimePicker.TimeProperty.PropertyName)
                {
                    Device.StartTimer(TimeSpan.FromSeconds(1), () =>
                    {
                        clockViewModel.SelectedTime = Picker.Time.Subtract(TimeSpan.FromSeconds(1));
                        return true;
                    });
                }
            };

我还尝试打印一个值,该值不断更新:

public int i = 0;

        private void StartTimer()
        {
            Device.StartTimer(TimeSpan.FromSeconds(1), () =>
            {
                clockViewModel.SelectedTime = Picker.Time.Subtract(TimeSpan.FromSeconds(1));
                label.Text = i;
                i++;
                return true;
            });
        }

价值不断增加,所以我确定它正在做某事。

这是我的模型视图:

public class ClockViewModel : BaseViewModel
    {
        private TimeSpan selectedTime;

        public TimeSpan SelectedTime
        {
            get => selectedTime;
            set
            {
                selectedTime = value;
                NotifyPropertyChanged();
            }
        }
    }

有人知道我在这里做错了吗?

计时器在其他线程中运行。 如果要在UI所在的主线程上运行某些内容,则必须使用Device.BeginInvokeOnMainThread()方法。 像这样:

Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
    Device.BeginInvokeOnMainThread (() => 
    {
        clockViewModel.SelectedTime = Picker.Time.Subtract(TimeSpan.FromSeconds(1));
        label.Text = i;
    });

    i++;
    return true;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM