i have created own calendar use of itemscontrol. make functionally need calendar display month that's selected in combobox.
right displays current month , lists items per date in listbox, doesn't update when change month or year in combobox.
viewmodel
private void refreshcalendar() { if (currentyearitem == 0) return; if (currentmonthitem == null) return; int year = (int)currentyearitem; int month = months.indexof(currentmonthitem) +1 ; datetime targetdate = new datetime(year,month,1); days= buildcalendar(targetdate); } public ienumerable<day> days { get; set; } public ienumerable<day> buildcalendar(datetime targetdate) { datetime d = new datetime(targetdate.year, targetdate.month, 1); int offset = dayofweeknumber(d.dayofweek); if (offset != 1) d = d.adddays(-offset); (int box = 1; box <= 42; box++) { var day = new day { date = d, enabled = true, istargetmonth = targetdate.month == d.month }; day.istoday = d == datetime.today; d = d.adddays(1); var viewsource = new collectionviewsource { source = scenelist }; viewsource.filter += new filtereventhandler((o, e) => { e.accepted = (e.item scene).date == day.date.tostring(); }); day.scenes = viewsource.view; yield return day; } } how refresh ienumerable each time value of combobox changes or there way of achieving this?
implement inotifypropertychanged interface. here example:
class classtest : inotifypropertychanged { private ienumerable<day> mylist; public ienumerable<day> mylist { { return mylist; } set { if (value != mylist) { mylist= value; onpropertychanged("mylist"); } } } public event propertychangedeventhandler propertychanged; protected void onpropertychanged(string propertyname) { propertychangedeventhandler handler = propertychanged; if (handler != null) handler(this, new propertychangedeventargs(propertyname)); } }
Comments
Post a Comment