定期自动更新MVVM中的数据

时间:2014-05-07 08:19:59

标签: c# xaml windows-phone-8 mvvm

在我的Model和ViewModel for XAML View(List)中,我有一个String属性。 数据在LoadData中从WebService中检索。 我没有使用MVVMlight。

型号:

public class LocationsModel : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }

    private string _id;
    public string ID
    {
        get
        {
            return _id;
        }
        set
        {
            if (value != _id)
            {
                _id = value;
                NotifyPropertyChanged("ID");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

视图模型:

public class MainViewSurroundingModel : INotifyPropertyChanged
{
    public MainViewSurroundingModel()
    {
        this.Items = new ObservableCollection<LocationsModel>();
    }

    public ObservableCollection<LocationsModel> Items { get; set; }

    private string _name = "";
    private string _id = "";

    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }

    public string ID
    {
        get
        {
            return _id;
        }
        set
        {
            if (value != _id)
            {
                _id = value;
                NotifyPropertyChanged("ID");
            }
        }
    }

    public bool IsDataLoaded
    {
        get;
        private set;
    }

    public async Task<bool> LoadData()
    {
        // WEB-API CALL IS HERE...
        this.IsDataLoaded = true;
        return true;
    }
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

我现在想要每5分钟通过代码(不是从WebService重新检索数据)定期更新Name属性。

我如何以及在何处实施此目标?

1 个答案:

答案 0 :(得分:0)

很抱歉模糊的回答,没有太多时间,如果有其他人关心写更多关于我说的话,欢迎他们。

如何

其中一种可能性是使用DispatcherTimer(更多关于它for example here)并使用它的Tick事件。(提供的链接中有一个教程)

现在关于创建计时器的位置。

这取决于您想要更改的内容以及何时启动它。

如果我想以某种预定义的方式更改列表中的所有数据,我可以这样做:

 public class MainViewSurroundingModel : INotifyPropertyChanged
 {
      //...omitted the parts you have done, only writing the things I'd change...
      MainViewSurroundingModel()
      {
           ..if there was something leave it here..
           changeTimer = new DispatcherTimer...
           changeTimer.Tick += Tick;
           changeTimer.Interval = ....et cetera, setting the timer based on tutorial
      }

      public ObservableCollection<LocationsModel> items;
      public ObservableCollection<LocationsModel> Items 
      {
        get //edited so that I can write my own setter
        {
            return items;
        }
        set
        {
            if(value != items)
            {
               items = value;
               //NotifyPropertyChanged("Items"); //can be used here, not necessary
               changeTimer.Start();
            }
        }
      }

      private DispatcherTimer changeTimer;//based on the tutorial
      //based on the tutorial provided, create dispatcher timer and
      //tick definition somewhere around here

      private Tick(...)
      {
          //code that iterates through the list and updates it goes here!
      }

 }
相关问题