C# Silverlight中的双向绑定静态DateTime属性

C# Silverlight中的双向绑定静态DateTime属性,c#,silverlight,data-binding,silverlight-5.0,C#,Silverlight,Data Binding,Silverlight 5.0,我有很多页面,每个页面都有自己的ViewModel,它继承自BaseViewModel 在某些页面上有一个DatePicker控件,其SelectedDate属性绑定到BaseViewModel中的ReportDate属性 然而,我刚刚被告知,这些页面上的DatePicker控件应该使用相同的日期,这意味着如果用户更改了第1页控件中的日期,当他导航到第2页时,第2页应该显示与第1页相同的日期 我的第一个想法是,用静态的DateTime属性替换ReportDate,但据我所知,在Silverlig

我有很多页面,每个页面都有自己的
ViewModel
,它继承自
BaseViewModel

在某些页面上有一个
DatePicker
控件,其
SelectedDate
属性绑定到
BaseViewModel
中的
ReportDate
属性

然而,我刚刚被告知,这些页面上的
DatePicker
控件应该使用相同的日期,这意味着如果用户更改了第1页控件中的日期,当他导航到第2页时,第2页应该显示与第1页相同的日期

我的第一个想法是,用静态的
DateTime
属性替换
ReportDate
,但据我所知,在Silverlight中这是不可能的(困难的?)


或者有更好的方法吗?

我认为这一点都不困难。这里有一个例子

public class BaseViewModel
{
    public DateTime ReportDate
    {
        get
        {
            return ClassHelper.StaticDate;
        }
        set
        {
            ClassHelper.StaticDate = value;
            RaisePropertyChanged("ReportDate")
        }
     }
}

public static ClassHelper : IPropertyChaged
{
    private static object sync = new object();
    private static DateTime staticDate;
    public static DateTime StaticDate
    {
        get
        {
            return staticDate;
        }
        set
        {
            lock(sync)
            {
                staticDate = value;                
            }
            RaisePropertyChanged("StaticDate")
        }
    }
}
然后在
BaseViewModel
子订阅到
ClassHelper.PropertyChaged
事件和处理程序调用
RaisePropertyChaged(“ReportDate”)

不要忘记在
BaseViewModel

当然,你可能需要改变其他想法,但这是基本想法


希望这能对您有所帮助。

有关
锁定(此)
不好的原因的解释,请参阅。最好锁定一个私有静态对象成员。我知道这很糟糕,我把它放在这里是为了强调这样一个事实,即处理并发更改的情况需要它,但是既然你提出了这一点,我就改变了它,谢谢你,你怎么能实现INotifyPropertyChanged到一个静态类呢?事实上我已经弄明白了。我没有使用静态类,而是创建了一个单例类来处理通知,现在一切正常。谢谢