【问题标题】:Xamarin.Forms C# property not updating in Device.StartTimerXamarin.Forms C# 属性未在 Device.StartTimer 中更新
【发布时间】:2019-04-18 21:57:21
【问题描述】:

我想创建一个对选定时间进行倒计时的应用。但是我遇到了一个奇怪的问题,我不知道自己做错了什么。

这是我的计时器,每次选择器的属性更改时都会调用它。当我选择一个时间时,代码仅删除 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();
            }
        }
    }

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

【问题讨论】:

    标签: c# mvvm xamarin.forms properties inotifypropertychanged


    【解决方案1】:

    计时器在不同的线程中运行。如果你想在 UI 所在的主线程上运行某些东西,那么你必须使用 Device.BeginInvokeOnMainThread() 方法。像这样:

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

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2012-02-04
      • 2017-02-05
      • 1970-01-01
      相关资源
      最近更新 更多