绑定前设置WPF Usercontrol属性

时间:2013-01-16 17:51:57

标签: wpf binding properties user-controls

我正在制作日历用户控件。它有一个开始日期和结束日期作为属性如此

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

这样我可以像这样调用Usercontrol

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

现在在usercontrol中,我需要计算开始日期和结束日期之间的周数和日期。为此,我自然需要使用选定的开始日期和结束日期。但是在计算绑定时,尚未设置属性。

所以绑定的属性如下所示:

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。

如何确保绑定时设置属性。或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

将您的StartDate和EndDate属性更改为DependencyProperties,并在其属性更改的回调中提高日期和周的Property Changed事件:

How To Raise Property Changed events on a Dependency Property?