Data binding Silverlight自定义控件和数据绑定不';在WP7中不能正常工作

Data binding Silverlight自定义控件和数据绑定不';在WP7中不能正常工作,data-binding,windows-phone-7,custom-controls,Data Binding,Windows Phone 7,Custom Controls,我正在尝试使用数据绑定创建日历控件 public partial class Calendar : UserControl { public static readonly DependencyProperty DateProperty = DependencyProperty.Register("Date", typeof(DateTime), typeof(Calendar), null); public

我正在尝试使用数据绑定创建日历控件

    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");

        }
    }
但是当我用这个控件创建listbox时,同一个calndar的日期是错误的。我确信通过数据绑定的日期是正确的,但我不明白为什么同一日历显示不同的日期(我注意到这是上一个日历控件的日期)


谢谢您的支持

嗯。。。我们从哪里开始?以下是我注意到的几件事:

  • 如果您使用的是依赖项属性,则无需从
    Date
    属性设置器调用
    OnPropertyChanged
  • dependency属性将类型声明为
    DateTime
    ,但您的公共公开属性的类型为
    object
    ,这要求您将其强制转换到其他位置
  • 如果在更多的情况下调用
    Calendar\u Loaded
    ,而不是响应
    Loaded
    事件(例如
    GotFocus
    事件),那么我建议您将其称为其他名称,或者创建一个具有相关名称的方法(例如UpdateDateParts),并从正确命名的单独事件处理程序中调用它
  • 在处理日期字符串时使用固定格式说明符无法很好地本地化
除此之外,我建议您可以以支持数据绑定(和重新模板化)的方式实现用户界面通过使用绑定并公开
日期
依赖项属性的日期部分,而不是手动更新事件处理程序中某些文本块/框的
文本
属性。事实上,如果从
控件
而不是
用户控件
派生,则可以创建并实际执行具有其用户权限的无外观控件接口由themes\generic.xaml中的样式定义,该样式可由控件的用户重新定义

至于为什么日历控件的不同实例中的日期不正确,我们需要查看一些XAML/代码,以了解控件是如何使用和初始化的,从而能够提供更好的答案。但是,我认为上面的问题值得一提,而不是试图在注释中说明