Click here to Skip to main content
15,894,343 members
Articles / Desktop Programming / WPF

Using converters to aggregate a list in a ListView

Rate me:
Please Sign up or sign in to vote.
4.64/5 (11 votes)
23 Jul 2008CPOL6 min read 66.1K   1.8K   27  
Explanation on how to use converters to calculate the sum, largest, average, etc., of the items in a ListView.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace AggregateConverterExample
{    
    public partial class Window1 : Window
    {
        // a list of employees
        public List<Employee>Employees { get; set; }        

        public Window1()
        {
            InitializeComponent();
            fillEmployees();
            Loaded += new RoutedEventHandler(Window1_Loaded);
        }
        
        private void fillEmployees()
        {
            // just generate some data to work woth
            Employees = new List<Employee>();
            Employees.Add(new Employee { FirstName = "Luke", LastName = "Skywalker", Salary = 1500, TravelDistance = 4.5,Series="Star Wars" });
            Employees.Add(new Employee { FirstName = "Anakin", LastName = "Skywalker", Salary = 1075, TravelDistance = 2.5, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Darth", LastName = "Vader", Salary = 3200, TravelDistance = 3.5, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Darth", LastName = "Maul", Salary = 1800, TravelDistance = 8.1, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Jar Jar", LastName = "Binks", Salary = 2340, TravelDistance = 3.4, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Obi-Wan", LastName = "Kenobi", Salary = 6260, TravelDistance = 12.6, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Padme", LastName = "Amidala", Salary = 1240, TravelDistance = 0.7, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Yoda", LastName = "", Salary = 9420, TravelDistance = 16.8, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Qui-Gon", LastName = "Jinn", Salary = 5320, TravelDistance = 2.9, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "Chewbacca", LastName = "", Salary = 2250, TravelDistance = 2.3, Series = "Star Wars" });
            Employees.Add(new Employee { FirstName = "James T.", LastName = "Kirk", Salary = 8632, TravelDistance = 22.3, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Spock", LastName = "", Salary = 2150, TravelDistance = 5.3, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Leonard", LastName = "McCoy", Salary = 5761, TravelDistance = 5.1, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Montgomery", LastName = "Scott", Salary = 4123, TravelDistance = 21.3, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Lt.", LastName = "Uhura", Salary = 2450, TravelDistance = 8.4, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Jean-Luc", LastName = "Picard", Salary = 8420, TravelDistance = 15.3, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Data", LastName = "", Salary = 4651, TravelDistance = 3.8, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Worf", LastName = "", Salary = 1242, TravelDistance = 7.2, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Tuvok", LastName = "", Salary = 2390, TravelDistance = 3.9, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Neelix", LastName = "", Salary = 1900, TravelDistance = 6.3, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Seven of", LastName = "Nine", Salary = 5800, TravelDistance = 6.9, Series = "Star Trek" });
            Employees.Add(new Employee { FirstName = "Kathryn", LastName = "Janeway", Salary = 7250, TravelDistance = 14.7, Series = "Star Trek" });
        }


        void Window1_Loaded(object sender, RoutedEventArgs e)
        {
            TheList.ItemsSource = Employees;
        }
     
        private void ButtonAll_Click(object sender, RoutedEventArgs e)
        {
            TheList.ItemsSource = Employees;
        }

        private void ButtonQuery1_Click(object sender, RoutedEventArgs e)
        {
            //select all employees from Star Trek
            var result = from q in Employees
                         where q.Series == "Star Trek"
                         select q;
            TheList.ItemsSource = result.ToList();
        }

        private void ButtonQuery2_Click(object sender, RoutedEventArgs e)
        {
            //Select all employees with a traveldistance of less than 10
            var result = from q in Employees
                         where q.TravelDistance < 10
                         select q;
            TheList.ItemsSource = result.ToList();
        }

    }
}

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 The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Velicus B.V.
Netherlands Netherlands
Microsoft MVP Client Dev . Founder of http://StoreAppsUG.nl, the Dutch Windows Store apps and Windows Phone apps usergroup. XAML / HTML5 developer. Writer. Composer. Musician.

Twitter
@Sorskoot

Awards / Honers
• October 2010,2011,2012,2013: Awarded Microsoft Expression Blend MVP
• June 2009: Second Place in the WinPHP challenge
• February 2009: Runner-up in de Mix09 10k Challenge
• June 2008: Winner of the Microsoft expression development contest at www.dekickoff.nl

Bio
I started programming around 1992, when my father had bought our first home computer. I used GWBasic at that time. After using QBasic and Pascal for a few years I started to learn C/C++ in 1996. I went to the ICT Academy in 1997 and finnished it in 2002. Until December 2007 I worked as a 3D specialist. Besides modelling I worked on different development projects like a 3D based Scheduler and different simultion tools in C# and Java. Though out the years I've gained much experience with ASP.NET, Silverlight, Windows Phone and WinRT.

Comments and Discussions