2009-06-03 16 views
0

私は、日付と時刻を含むリストビューにバインドされたObservableコレクションを持っています。 コレクションの時間が発生すると、メッセージボックスが表示されます。日付と時刻を含むobservableコレクションを反復してメッセージを表示

私は、コレクション内の時間が発生したときに、私は、メッセージを表示することができますどのように

public class Reminder 
{ 
    public string Name { get; set; } 
    public string Date { get; set; } 
    public string Time { get; set; } 
} 

ObservableCollection<Reminder> reminderList = new ObservableCollection<Reminder>(); 
Reminder newItem = new Reminder 
            { 
             Name = name, 
             Date = date, 
             Time = time 
            }; 
reminderList.Add(newItem); 

ようですか?

答えて

0

は、あなたのリマインダークラスがそうのようにINotifyPropertyChangedの実装を持っている:

その後
public class Reminder : INotifyPropertyChanged 
{ 
    private string time; 

    public string Name { get; set; } 
    public string Date { get; set; } 
    public string Time 
    { 
     get 
     { 
      return this.time; 
     } 
     set 
     { 
      if (this.time != value) 
      { 
       this.time = value; 
       this.OnTimeChanged(); 
      } 
     } 
    } 
    protected void OnTimeChanged() 
    { 
     var handler = this.PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs("Time")); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 

} 

、あなたのリマインダーオブジェクトアップ新しい、PropertyChangedイベントをフックするとき。変更されたプロパティが「時間」で時間が目的のものである場合は、メッセージを表示してください:

 var newItem = new Reminder 
     { 
      Name = name, 
      Date = date, 
      Time = time 
     }; 
     newItem.PropertyChanged += (o, ex) => 
     { 
      if (ex.PropertyName == "Time" && newItem.Time == specificTime) 
      { 
       //do what you need to do 
      } 
     }; 
     reminderList.Add(newItem); 
+0

コードを説明してください。そして私はその概念をはっきりと理解することができます。 – Sauron

2

Timerオブジェクトを作成し、そのTickイベントハンドラでは、リストを繰り返して有効期限が切れているものを確認する方法はありますか?

1

簡単な方法 - 毎分(または何らかの周波数が意味をなす)トリガするように設定するタイマーを開始します。タイマーがトリガーされたら、通知を表示するアイテムに対してreminderList内のすべてのアイテムをチェックします(適度に小さいサイズのものとします)。

private void timer1_Tick(object sender, EventArgs e) 
{ 
    var reminders = from item in reminderList 
         where item.Date > DateTime.Now 
         select item; 
    foreach (Reminder reminder in reminders) 
    { 
     reminderList.Remove(reminder); 
     MessageBox.Show("Wake up, " + reminder.Name + "!"); 
    } 
} 

リマインダー時間が標準の単一のDateTimeフィールドではなく2つの文字列フィールドとして保存されている理由はありますか?表示のために時間をストリングに強制している場合でも、より合理的なものとして内部に格納していることを確認してください。

+0

「item.Time」を使用するには何かを追加する必要があります) 'Date'と 'Time'がビジネスオブジェクト内の文字列として定義されているように見えることを補う。 – jerryjvl

+0

@ jerryjvl:ええ、私はそれについてコメントするつもりでした。それは単なるサンプルで、使い捨てのコードだとしましょう。ちょうどその場合の答えをより良く更新する。 –

関連する問題