كيفية تنفيذ شبكة بيانات Silverlight محملة كسول دون استخدام الترحيل

StackOverflow https://stackoverflow.com/questions/2902594

سؤال

باستخدام قالب تطبيق الأعمال من خدمات RIA التي تم إصدارها العلامة التجارية الجديدة ، يمكنك رؤية الكثير من الأمثلة باستخدام شبكة البيانات الموجودة أعلى أ DomainDataSource بالاشتراك مع أ DataPager. يمكن استخدام Presenties Pagesize and Moadsize لضبط كمية البيانات المراد عرضها في صفحة واحدة والبيانات المسبقة في الخلفية.

الآن أرغب في الحصول على شبكة بيانات مع شريط التمرير وليس النداء. الكامنة DomainDataSource يجب تحميل البيانات التي يتم diplayed في الشبكة فقط. يجب أن يؤدي ذلك إلى تحميل آخر ، عندما يقوم المستخدم بالتمرير إلى العناصر التي لم يتم بعد في سياق البيانات. هل هناك أي تنفيذ عينة كيفية القيام بذلك؟

هل كانت مفيدة؟

المحلول

لقد نشرت للتو اثنين من منشورات المدونة (الجزء 1, الجزء 2) التي تعطي حلي لهذه المشكلة. لقد نشرت أيضا عينة لتوضيح ذلك الذي ينفذ رأيي في مفهوم VirtualCollection (لا أعرف كيف يقارن هذا مع تحكم Infragistic ، لأنني لم أستخدم ذلك).

لإظهار مدى سهولة الاستخدام ، إليك بعض المقتطفات من العينة. أولاً ، إليك كيفية استخدامك VirtualCollection, ، الفصل الذي ينسق جلب البيانات:

public class MainViewModel : ViewModel
{
    private NetflixTitlesSource _source;

    public VirtualCollection<Title> Items { get; private set; }

    public MainViewModel()
    {
        _source = new NetflixTitlesSource();
        Items = new VirtualCollection<Title>(_source, pageSize: 20, cachedPages: 5);
    }

    protected override void OnViewLoaded()
    {
        Items.Refresh();
    }
}

في XAML ، يمكنك ببساطة ربط Items خاصية ل ItemsSource خاصية أ ListBox أو DataGrid

لكل مصدر بيانات ، يجب عليك تطبيق VirtualCollectionsource. إليك ما الطريقتين الرئيسيتين Netflixtitlessource يشبه:

public class NetflixTitlesSource : VirtualCollectionSource<Title>
{
    protected override Task<int> GetCount()
    {
        return GetQueryResults(0, 1, null)
            .ContinueWith(t => (int)t.Result.TotalCount, TaskContinuationOptions.ExecuteSynchronously);
    }

    protected override Task<IList<Title>> GetPageAsyncOverride(int start, int pageSize, IList<SortDescription> sortDescriptions)
    {
        return GetQueryResults(start, pageSize, sortDescriptions)
            .ContinueWith(t => (IList<Title>)((IEnumerable<Title>)t.Result).ToList(), TaskContinuationOptions.ExecuteSynchronously);
    }

    private Task<QueryOperationResponse<Title>> GetQueryResults(int start, int pageSize, IList<SortDescription> sortDescriptions)
    {
        // code to query the Netflix OData API
    }
}

نصائح أخرى

تحقق من العمل الذي قامت به Bea Stollnitz على مدونتها. على الرغم من أنها ليست إجابة مباشرة على سؤالك ، إلا أنها كتبت قليلاً عن واجهة المستخدم وتصور البيانات. إليك رابط من مدونتها أعتقد أنه قد يساعد في البدء:

المحاكاة الافتراضية للبيانات: http://bea.stollnitz.com/blog/؟p=344

هول!
كريس

يطلق عليه الترحيل الشبح. المكون واحد لديه عينة من بياناتها التي تستخدم ترحيل خلسة. بمجرد التمرير لأسفل ، تحصل على الصفحة التالية.

http://demo.componentone.com/silverlight/controlexplorer/#datagrid/stealth٪20paging

يعرض العرض التوضيحي ، ويمكنك تنزيل العينة التي تعرض الرمز.

أتمنى أن يساعدك هذا،

جريج

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top