title: INotifyPropertyChanged and ObservableCollection WPF
body: <p>Right now I have a calender that only displays one month(what ever month I pass in). I'm trying to let the user pick what month and year from a comboBox and have the calender update. I'm binding using observablecollection which I'm sort of familiar with. I have no clue how INotifyPropertyChanged works though. I've never used it before. Any help or advice is greatly appreciated. This is what I have so far:</p>
  
  <pre><code>public class Schedule : INotifyPropertyChanged
  {
      public event PropertyChangedEventHandler PropertyChanged;
  
      public void Update(int propertyName)
      {
          if (propertyName != null)
          {
              PropertyChangedEventHandler handler = PropertyChanged;
              if (handler != null)
                   handler.Invoke(this, new PropertyChangedEventArgs(propertyName.ToString()));
          }
      }
  
  
     // public void UpdateCal(PropertyChangedEventArgs e)
     // {
      //    if (PropertyChanged != null)
      //        PropertyChanged(this, e);
    //  } 
      public string MonthWeek { get; set; }
      public string Year { get; set; }
      public string Month { get; set; }
      public string day { get; set; }
      public string WeekOfYear { get; set; }
      public string dayofweek { get; set; }
  
     // public string month {
      //    get {return Month; }
      //    set
      //    {
       //       UpdateCal(new PropertyChangedEventArgs("month"));
        //  }
     // }
      public int WeekNo { get; set; }
      public int WeekDay { get; set; }
      public DateTime Date { get; set; }
   }
  </code></pre>
  
  <p>---This is another class that figures out where to place each date on the grid----</p>
  
  <pre><code>           public SchedulePage(MainWindow parentForm)
      {
          InitializeComponent();
  
          pick = Convert.ToInt32(comboMonth.SelectedItem) + 1;
          _parentForm = parentForm;
          // DateTime date = new DateTime(year, month, day);
          var t = new List&lt;Schedule&gt;();
          DateTime curr = DateTime.Now;
        //  comboMonth.Items.Add(curr.Month);
          DateTime newcurr = new DateTime(2011, pick, 1);
       //   pickdate = datePickercal.SelectedDate;
        //  DateTime newcurr = new DateTime(curr.Year, curr.Month, 1);
          var cal = System.Globalization.DateTimeFormatInfo.CurrentInfo.Calendar;
          var ms = cal.GetWeekOfYear(new DateTime(newcurr.Year, newcurr.Month, 1), System.Globalization.CalendarWeekRule.FirstDay, System.DayOfWeek.Sunday);
          for (var i = 1; newcurr.Month == pick; newcurr = newcurr.AddDays(1))
          {
              var sched = new Schedule();
              var month_week = (newcurr.Day / 7) ;
              sched.MonthWeek = newcurr.GetWeekOfMonth().ToString();
              sched.Month = newcurr.Month.ToString();
              sched.Year = newcurr.Year.ToString();
              sched.day = newcurr.Day.ToString();
              sched.WeekOfYear = cal.GetWeekOfYear(newcurr, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString();
              sched.dayofweek = newcurr.DayOfWeek.ToString();
              t.Add(sched);
  
                  _parentForm.bindings.schedule.Add(new Schedule { WeekNo = newcurr.GetWeekOfMonth()-1, WeekDay = (int)newcurr.DayOfWeek, day = newcurr.Day.ToString() });
  
          }
          lblDate.Content = (newcurr.Month -1) + "/" + newcurr.Year;
  
           DataContext = _parentForm.Bindings;
  </code></pre>
  
  <p>---And this class makes the observablecollections-----</p>
  
  <pre><code>           public partial class BindingCamper 
  {  // This class assist in binding campers from listview to the textboxes on the camperspage
      public ObservableCollection&lt;Camper&gt; Campers { get; set; }
      public ObservableCollection&lt;Staff&gt; StaffMembers { get; set; }
      public ObservableCollection&lt;Schedule&gt; schedule { get; set; }
      public BindingCamper()
      {
          Campers = new ObservableCollection&lt;Camper&gt;();
        StaffMembers = new ObservableCollection&lt;Staff&gt;();
        schedule = new ObservableCollection&lt;Schedule&gt;();
      }
  </code></pre>