我正在尝试使用数据绑定创建日历控件。
public partial class Calendar : UserControl
{
public static readonly DependencyProperty DateProperty =
DependencyProperty.Register("Date", typeof(DateTime),
typeof(Calendar), null);
public object Date
{
get { return GetValue(DateProperty); }
set
{
SetValue(DateProperty, value);
OnPropertyChanged("Date");
}
}
public Calendar()
{
// Required to initialize variables
InitializeComponent();
DayText.Text = ((DateTime)Date).ToString("dd");
MonthText.Text = ((DateTime)Date).ToString("MMM");
this.Loaded += new RoutedEventHandler(Calendar_Loaded);
this.GotFocus += new RoutedEventHandler(Calendar_Loaded);
}
void Calendar_Loaded(object sender, RoutedEventArgs e)
{
DayText.Text = ((DateTime)Date).ToString("dd");
MonthText.Text = ((DateTime)Date).ToString("MMM");
}
}
但是当我使用此控件创建列表框时,同一个calndar的日期错误。我确信通过彻底数据绑定的日期是正确的,但我不明白为什么同一个日历显示不同的一天(我注意到这是前一个日历控件的日期)
感谢您的支持!
答案 0 :(得分:2)
OnPropertyChanged
属性设置器调用Date
。DateTime
,但您的公开公开属性的类型为object
,然后要求您将其转换为其他类型。Calendar_Loaded
而不是响应Loaded
事件(例如GotFocus
事件,那么我建议您将其称为其他内容,或者创建一个具有相关名称的方法(例如UpdateDateParts),并从正确命名的单独事件处理程序中调用它。除此之外,我建议您可以通过使用绑定并公开Date
依赖项属性的日期部分而不是支持数据绑定(和重新模板化)来实现用户界面。手动更新事件处理程序中某些文本块/框的Text
属性。实际上,如果你派生自Control
而不是UserControl
那么你可以创建并实现无外观控件,它具有由themes \ generic.xaml中的样式定义的用户界面,可以由用户重新定义你的控制权。
至于为什么日历在日历控件的不同实例中不正确,我们需要查看一些XAML /代码,以了解如何使用和初始化控件以便能够提供更好的答案。但是,我认为上述内容值得一个答案,而不是试图在评论中说出来。