まずTimelineViewModelのLoad()メソッドを書き換え。
//取得した結果をCollectionに格納(すでに入っていたらいったん空にして入れ直す) if (_allItems.Count > 0) { _allItems.Clear(); } foreach (var item in result) { _allItems.Add(new TimelineItemViewModel(item)); }
Load()の一部を書き換えて、このメソッドを呼ぶたびにAllItemsが最新になるようにしました。
本来ならば、前回からの差分だけを要求して
差分を追加するようにすべきですが、今回は手抜きです。
次にWindow1.xaml.csを以下のように変更します。
namespace WTwitter { /// <summary> /// Window1.xaml の相互作用ロジック /// </summary> public partial class Window1 : Window { TimelineViewModel viewModel = new TimelineViewModel(); public Window1() { var timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMinutes(2); timer.Tick += this.UpdateTimeline; timer.Start(); this.DataContext = viewModel; InitializeComponent(); } public void UpdateTimeline(object sender, EventArgs e) { viewModel.Load(); } } }
まずviewModel.Load()をイベントハンドラ作ってそこに移しました。
イベントハンドラとは、何かのイベントが起きたときの処理を記述したメソッドです。
今回はTimerの時間で発生するイベントとしてUpdateTimelineを指定しています。
イベントハンドラは以上のようにobjectとEventArgsの引数を取り、
戻り値はvoidというようなパターンが決められています。
あとは簡単だと思います。
今回のソースコード
http://wtwitter.codeplex.com/SourceControl/changeset/view/38373
「あとは簡単だと思います。」の下を書き忘れました
返信削除Timerを作って、作動間隔を2分に設定して
2分ごとに起きるイベントをUpdateTimelineに指定して
タイマーをスタートさせています。
timerをローカル変数にしていたのが明らかに間違っていました。
返信削除次回のソースコードから修正します。
正しくはクラス変数にしてください。