如何在Silverlight/CSLA中创建延迟加载和缓存的集合

如何在Silverlight/CSLA中创建延迟加载和缓存的集合,silverlight,caching,asynchronous,csla,Silverlight,Caching,Asynchronous,Csla,我正在为使用CSLA编写的现有桌面应用程序创建Silverlight前端。我遇到的一个问题是转换类,如下所示: public class SomeCollection : Csla.ReadOnlyListBase<SomeCollection, SomeObject> { private static SomeCollection _list = null; public static SomeCollection GetSomeCollection() {

我正在为使用CSLA编写的现有桌面应用程序创建Silverlight前端。我遇到的一个问题是转换类,如下所示:

public class SomeCollection : Csla.ReadOnlyListBase<SomeCollection, SomeObject>
{
    private static SomeCollection _list = null;
    public static SomeCollection GetSomeCollection()
    {
        if (_list == null)
        {
            _list = DataPortal.FetchChild<SomeCollection>();
        }
        return _list;
    }
}
public static void GetSomeCollection(EventHandler<DataPortalResult<SomeCollection>> callback)
{
    DataPortal<SomeCollection> portal = new DataPortal<SomeCollection>();
    portal.FetchCompleted += callback;
    portal.BeginFetch();
}
公共类SomeCollection:Csla.ReadOnlyListBase
{
私有静态集合_list=null;
公共静态SomeCollection GetSomeCollection()
{
如果(_list==null)
{
_list=DataPortal.FetchChild();
}
返回列表;
}
}
代码中添加了“SomeCollection.GetSomeCollection()”,这在silverlight端不起作用,因为所有DataPortal访问都是异步的,因此您必须从以下内容开始:

public class SomeCollection : Csla.ReadOnlyListBase<SomeCollection, SomeObject>
{
    private static SomeCollection _list = null;
    public static SomeCollection GetSomeCollection()
    {
        if (_list == null)
        {
            _list = DataPortal.FetchChild<SomeCollection>();
        }
        return _list;
    }
}
public static void GetSomeCollection(EventHandler<DataPortalResult<SomeCollection>> callback)
{
    DataPortal<SomeCollection> portal = new DataPortal<SomeCollection>();
    portal.FetchCompleted += callback;
    portal.BeginFetch();
}
publicstaticvoid GetSomeCollection(EventHandler回调)
{
DataPortal=新的DataPortal();
portal.FetchCompleted+=回调;
portal.BeginFetch();
}
当数据准备就绪时,将调用回调处理程序。我当然可以缓存结果,但在此期间,任何SomeCollection.GetSomeCollection()调用都将失败

在异步调用完成之前,我一直尝试阻塞,但到目前为止,我运气不佳。这不是一个很好的解决方案,但是如果在加载数据之前调用SomeCollection.GetSomeCollection(),我不知道还能做什么。我唯一能想到的另一个选项是允许SomeCollection.GetSomeCollection()返回null,然后以某种方式将所有调用方转换为处理null返回值

有什么想法吗

(我是Silverlight和Csla的新手,所以我很可能完全走错了方向)