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

时间:2013-07-23 07:51:21

标签: c# silverlight data-binding silverlight-5.0

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

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

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

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

或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

我认为这根本不是很困难。这是一个例子

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 subsicribe到ClassHelper.PropertyChaged事件和处理程序调用{​​{1}}中。

不要忘记在RaisePropertyChaged("ReportDate")

中的dispose方法中取消订阅该事件

当然,您可能需要更改其他想法,但这是基本想法。

希望能帮助你。