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到一个静态类呢?事实上我已经弄明白了。我没有使用静态类,而是创建了一个单例类来处理通知,现在一切正常。谢谢