2017-11-11 201 views
0

因此,我想从现在的WPF日历中将不在日期时间列表中的所有日期从2000年停电。从WPF日历中删除日期限制日期集合

我的想法是从2000年到现在分别停止所有日期,然后从停电日期收集中删除每个日期。

此代码添加日期,但无法从集合中删除日期。

var DateList = FI.Select(x => x.LastWriteTime.Date).Distinct().ToList(); 

for (var day = new DateTime(2000,1,1); day.Date <= DateTime.Now.Date; day = day.AddDays(1)) 
{     
     Calendar.BlackoutDates.Add(new CalendarDateRange(day)); 
} 
foreach (DateTime k in Datelist) 
{ 
    Calendar.BlackoutDates.Remove(new CalendarDateRange(k)); 
} 

我比较了停电最新集合的日期范围和新创建一个从列表中的当前迭代,但它说,他们是不等价的。

Comparison seen here

谢谢你的帮助。

回答

0

CalendarDateRange class让您指定范围的开始日期和结束日期,您不必为每天添加CalendarDateRange

https://msdn.microsoft.com/en-us/library/system.windows.controls.calendardaterange(v=vs.110).aspx

此外,也有很多对Calendar.BlackoutDates文档代码示例: https://msdn.microsoft.com/en-us/library/system.windows.controls.calendar.blackoutdates(v=vs.110).aspx

 var DateList = FI.Select(x => x.LastWriteTime.Date).Distinct().ToList(); 

     //Add all dates between DateTime.MinValue and the day before your DateList min value. 
     Calendar.BlackoutDates.Add(new CalendarDateRange(DateTime.MinValue, DateList.Min().AddDays(-1))); 

**编辑**

阅读您的评论之后,似乎我误解了你的问题。您尝试删除CalendarDateRange的新实例,该实例与添加到集合中的CalendarDateRange实例不同,即使它们具有相同的startend值。

与此一替换您foreach块来解决您的问题:

  foreach (var k in DateList) 
     { 
      while (Calendar.BlackoutDates.Any(bd => bd.Start.Date == k.Date)) 
      { 
       Calendar.BlackoutDates.Remove(Calendar.BlackoutDates.FirstOrDefault(bd => bd.Start.Date == k.Date)); 
      } 
     } 
+0

我需要停电是不是在DateList不只是那些在DateList开始之前的任何日期。此外,DateList中的日期不一定是一个接一个,它们将按照时间顺序排列,但我不知道我想要停电的日期列表中有多少空白。 – Chris