6

का उपयोग किए बिना आलसी लोड किए गए सिल्वरलाइट डेटा ग्रिड को कैसे कार्यान्वित करें ब्रांड नई रिलीज आरआईए सेवाओं से बिजनेस एप्लिकेशन टेम्पलेट का उपयोग करके, आप DataPager के साथ DomainDataSource के शीर्ष पर डेटा ग्रिड का उपयोग करके कई उदाहरण देख सकते हैं। गुण PageSize और LoadSize डेटा एक ही पन्ने में प्रदर्शित करने के लिए की राशि और डेटा है कि पृष्ठभूमि में प्रीफ़ेच है समायोजित करने के लिए इस्तेमाल किया जा सकता।पेजिंग

अब मैं स्क्रॉलबार और कोई पेजर के साथ डेटा ग्रिड रखना चाहता हूं। अंतर्निहित DomainDataSource को केवल उस डेटा को लोड करना चाहिए जो ग्रिड में डाला गया है। इसे एक और लोड ट्रिगर करना चाहिए, जब उपयोगकर्ता उन आइटम्स पर स्क्रॉल करता है जो अभी तक डेटा संदर्भ में नहीं हैं। क्या कोई नमूना कार्यान्वयन है कि यह कैसे करें?

+0

अपडेट:: यहाँ क्या NetflixTitlesSource के दो प्रमुख तरीकों की तरह लग रही है के बाद से विषय वापस मैं वर्तमान में 3 पक्ष नियंत्रण की जांच कर रहा हूँ आता है। इंफ्राजिस्टिक्स "वर्चुअलकोलेक्शन" यह सबसे अच्छा तरीका संभालने लगता है और डोमेन सर्विसेज से जुड़ा हो सकता है - अच्छी चीजें –

उत्तर

1

मैं सिर्फ ब्लॉग पोस्ट (Part 1, Part 2) है कि इस समस्या का समाधान मेरी देने के एक जोड़े प्रकाशित किया है। मैंने a sample को गिटहब में भी पोस्ट किया है जो वर्चुअल कोलेक्शन अवधारणा पर अपना स्वयं का लेना लागू करता है (मुझे नहीं पता कि यह इन्फ्राजिस्टिक्स के नियंत्रण से कैसे तुलना करता है, क्योंकि मैंने इसका उपयोग नहीं किया है)।

यह दिखाने के लिए कि इसका उपयोग करना कितना आसान है, नमूना से कुछ स्निपेट यहां दिए गए हैं।

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 संपत्ति एक ListBox या DataGrid

की ItemsSource संपत्ति के लिए प्रत्येक डेटा स्रोत आप चाहिए के लिए बाध्य: सबसे पहले, आप निम्न तरीके से VirtualCollection, वर्ग कि डेटा प्राप्त करने में निर्देशांक का उपयोग करें वर्चुअल कोलेक्शन स्रोत लागू करें।

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 
    } 
} 
+0

आशाजनक लग रहा है। मैं निश्चित रूप से इसे जांच लेंगे। इस बीच हमने गंभीरता से स्रोतों को घुसपैठ करने के लिए स्रोतों को tweaked ... –

1

बीए स्टॉलनिट्ज़ ने अपने ब्लॉग पर किए गए काम को देखें। हालांकि आपके प्रश्न का सीधा जवाब नहीं है, उसने यूआई और डेटा विज़ुअलाइजेशन पर काफी कुछ लिखा है।

डाटा वर्चुअलाइजेशन: http://bea.stollnitz.com/blog/?p=344

HTH यहाँ अपने ब्लॉग से एक लिंक मुझे लगता है कि प्राप्त करने के लिए मदद कर सकता है आप शुरू कर रहे हैं!
क्रिस

+0

धन्यवाद क्रिस, मैं अंत में कल इसे पढ़ता हूं। आप बिल्कुल सही हैं, यह कोई सीधा जवाब नहीं है लेकिन इसमें कुछ अच्छे प्रस्ताव हैं। –

+1

वह लिंक टूटा हुआ है, लेकिन मुझे लगता है कि यह बीए से एक ही सामग्री है: http://www.zagstudio.com/blog/498#.UE8TT42PXQs – iggymoran

1

इसे चुपके पेजिंग कहा जाता है। घटक वन में उनके डेटाग्रिड का नमूना है जो चुपके पेजिंग का उपयोग करता है। जैसे ही आप नीचे स्क्रॉल करते हैं, यह अगले पृष्ठ को प्राप्त करता है।

http://demo.componentone.com/Silverlight/ControlExplorer/#DataGrid/Stealth%20Paging

डेमो दिखाता है और इसमें आप नमूना जो कोड दिखाने डाउनलोड कर सकते हैं।

आशा इस मदद करता है,

ग्रेग

संबंधित मुद्दे