[英]Silverlight Custom Control and Databinding doesn't work properly in WP7
我正在尝试创建具有数据绑定的日历控件。
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");
}
}
但是,当我使用此控件创建列表框时,同一日历的日期错误。 我确定通过彻底数据绑定的日期是正确的,但我不明白为什么同一个日历显示不同的一天(我注意到这是前一个日历控件的日期)
感谢您的支持!
嗯...我们从哪里开始? 这是我注意到的几件事:
Date
属性设置器中调用OnPropertyChanged
。 DateTime
,但是您的公开公开属性是object
类型,然后要求您将其转换为其他位置。 Calendar_Loaded
而不是响应Loaded
事件(例如GotFocus
事件,那么我建议您将其称为其他内容,或者创建具有相关名称的方法(例如UpdateDateParts)并调用它来自正确命名的单独事件处理程序。 一些人,我建议你可以通过使用绑定和暴露Date
依赖项属性的日期部分而不是手动更新某些的Text
属性来以支持数据绑定(和重新模板化)的方式实现用户界面。事件处理程序中的文本块/框。 实际上,如果您从Control
而不是UserControl
派生,那么您可以创建并实现无外观控件,该控件具有由themes \\ generic.xaml中的样式定义的用户界面,该样式可由控件的用户重新定义。
至于为什么在日历控件的不同实例中日期不正确,我们需要查看一些XAML /代码,以了解如何使用和初始化控件以便能够提供更好的答案。 但是,我认为以上内容值得一提,而不是试图在评论中说出来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.