2009-06-03 2 views
0

날짜 및 시간이 포함 된 listview에 바인딩되는 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 필드가 아닌 두 개의 문자열 필드로 미리 알림 시간이 저장되어있는 이유가 있습니까? 문자열을 표시 할 시간을 강요하더라도 내부적으로 더 합리적인 것으로 저장해야합니다.

+0

'item.Time'을 사용하려면 무언가를 추가해야 할 수도 있습니다.) ...) 'Date'및 'Time'이 비즈니스 객체의 문자열로 정의 된 것처럼 보임을 보완합니다. – jerryjvl

+0

@ jerryjvl : 그래, 나는 그것에 대해 논평하려고했다. 그 코드를 그냥 샘플이라고 가정 해 봅시다. 방금 경우에 대한 답변을 더 잘 업데이트하십시오. –

관련 문제