Windows Phone 7 Data Binding with Templates: Listing 2

The GroupedCustomers class.

public class GroupedCustomers {
  private const string Alphabet = "abcdefghijklmnopqrstuvwxyz";

  private Group<CustomerListItem>[] customersByLetter;
  public Group<CustomerListItem>[] CustomersByLetter {
    get {
      if (customersByLetter == null) {
        var customers = (new DesignData()).CustomerList;
        var grouped = (from ing in customers
                         group ing by ing.Name.ToLower()[0]
                         into CustomerGroup
                         select CustomerGroup).ToArray();
        customersByLetter = (from letter in Alphabet
                                let customerSet = grouped.FirstOrDefault
                                ((grouping) => grouping.Key == letter)
                                select new Group<CustomerListItem>
                                  (letter.ToString(), customerSet)).ToArray();
      }
      return customersByLetter;
    }
  }
}

About the Author

Nick Randolph runs Built to Roam, a consulting company that specializes in training, mentoring and assisting other companies build mobile applications. With a heritage in rich client applications for both the desktop and a variety of mobile platforms, Nick currently presents, writes and educates on the Windows Phone platform.