まず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をローカル変数にしていたのが明らかに間違っていました。
返信削除次回のソースコードから修正します。
正しくはクラス変数にしてください。