2017-11-11 24 views
0

したがって、Datetimeリストにない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クラス範囲の開始日と終了日を指定できます。毎日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))); 

** EDIT **

あなたのコメントを読んだ後、それは私と思われますあなたの問題を誤解しました。同じstartendの値を持っていても、コレクションに追加されたCalendarDateRangeインスタンスとは異なるCalendarDateRangeの新しいインスタンスを削除しようとしています。

あなたの問題を解決するために、この1とあなたの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

関連する問題