1

カレンダーのユーザーコントロールを作成しています。そのようなプロパティとして開始日と終了日があります

public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }

このようにUsercontrolを呼び出すことができます

<Local:CalendarControl StartDate="7/1/2013" EndDate="8/11/2013">
</Local:CalendarControl>

ユーザーコントロール内で、開始日と終了日の間の週番号と日付を計算する必要があります。このために、私は当然、選択した開始日と終了日を使用する必要があります。ただし、バインディングが計算されるまでに、プロパティはまだ設定されていません。

したがって、バインドされているプロパティは次のようになります。

public List<DateTime> Dates
{
    get
    {
        var dateTimes = new List<DateTime>();
        for (var currentDate = StartDate; currentDate <= EndDate; currentDate = currentDate.AddDays(1))
            dateTimes.Add(currentDate);
        return dateTimes;
    }
}

public List<int> Weeks
{
    get
    {
        var weeks = new List<int>();
        if (DateTimeFormatInfo.CurrentInfo != null)
        {
            var cal = DateTimeFormatInfo.CurrentInfo.Calendar;

            foreach (var dateTime in Dates)
            {
                var weekNum = cal.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
                if (weeks.All(f => f != weekNum))
                {
                    weeks.Add(weekNum);
                }
            }
        }
        return weeks;
    }
}

また、XAMLでは、バインドされているDATESプロパティとWEEKSプロパティがあります。ただし、最初に設定されるStartDateとEndDateに依存します。

プロパティがバインドされているときにプロパティが設定されていることを確認するにはどうすればよいですか。それとも、これを行うためのより良い方法はありますか?

4

1 に答える 1

2

StartDateプロパティとEndDateプロパティをDependencyPropertiesに変更し、それらのプロパティ変更コールバックで、日付と週のプロパティ変更イベントを発生させます。

依存関係プロパティでプロパティ変更イベントを発生させる方法は?

于 2013-01-16T18:29:56.127 に答える