【发布时间】:2015-10-10 13:44:52
【问题描述】:
我使用 ItemsControl 创建了自己的日历。但是为了使其功能齐全,我需要日历来显示在 ComboBox 中选择的月份。
现在它只显示当前月份并在列表框中列出每个日期的项目,但是当我更改 ComboBox 中的月份或年份时它不会更新。
视图模型
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);
for (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 as Scene).Date == day.Date.ToString();
});
day.Scenes = viewSource.View;
yield return day;
}
}
每次组合框的值发生变化时如何刷新 IEnumerable 还是有其他方法可以实现这一点?
【问题讨论】:
标签: c# wpf calendar ienumerable observablecollection