Click here to Skip to main content
15,891,431 members
Articles / Desktop Programming / WPF

WPF: Data Virtualization

Rate me:
Please Sign up or sign in to vote.
4.95/5 (180 votes)
28 Mar 2013Public Domain9 min read 677.7K   20.2K   353  
A collection class providing data virtualization with large data sets.
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;

namespace DataVirtualization
{
    /// <summary>
    /// Demo implementation of IItemsProvider returning dummy customer items after
    /// a pause to simulate network/disk latency.
    /// </summary>
    public class DemoCustomerProvider : IItemsProvider<Customer>
    {
        private readonly int _count;
        private readonly int _fetchDelay;

        /// <summary>
        /// Initializes a new instance of the <see cref="DemoCustomerProvider"/> class.
        /// </summary>
        /// <param name="count">The count.</param>
        /// <param name="fetchDelay">The fetch delay.</param>
        public DemoCustomerProvider(int count, int fetchDelay)
        {
            _count = count;
            _fetchDelay = fetchDelay;
        }

        /// <summary>
        /// Fetches the total number of items available.
        /// </summary>
        /// <returns></returns>
        public int FetchCount()
        {
            Trace.WriteLine("FetchCount");
            Thread.Sleep(_fetchDelay);
            return _count; 
        }

        /// <summary>
        /// Fetches a range of items.
        /// </summary>
        /// <param name="startIndex">The start index.</param>
        /// <param name="count">The number of items to fetch.</param>
        /// <returns></returns>
        public IList<Customer> FetchRange(int startIndex, int count)
        {
            Trace.WriteLine("FetchRange: "+startIndex+","+count);
            Thread.Sleep(_fetchDelay);

            List<Customer> list = new List<Customer>();
            for( int i=startIndex; i<startIndex+count; i++ )
            {
                Customer customer = new Customer {Id = i+1, Name = "Customer " + (i+1)};
                list.Add(customer);
            }
            return list;
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under A Public Domain dedication


Written By
Software Developer (Senior)
United Kingdom United Kingdom
Paul's first venture into software development was on ZX Spectrum BASIC at age 10. Twenty years and a engineering degree later, Paul is a professional software developer based in Northern Ireland.

Comments and Discussions