Some few tips and instructions on how to bind data items contained in a List to a WPF ListView.
Create a new empty WPF Application:
Then create a new ViewModel class for out MainWindow.xaml which will be used to create and access the data items that are bound to the ListView:
Our MainWindowViewModel class has a getter for obtaining the list of data items we wish to present in the ListView control:
MainWindowViewModel.cs
using System.Collections.Generic;
namespace ListViewWpf
{
public class Item
{
public Item(string name, string matches)
{
Name = name;
Matches = matches;
}
public string Name { get; set; }
public string Matches { get; set; }
}
public class ItemHandler
{
public ItemHandler()
{
Items = new List<Item>();
}
public List<Item> Items { get; private set; }
public void Add(Item item)
{
Items.Add(item);
}
}
public class MainWindowViewModel
{
private readonly ItemHandler _itemHandler;
public MainWindowViewModel()
{
_itemHandler = new ItemHandler();
_itemHandler.Add(new Item("John Doe", "12"));
_itemHandler.Add(new Item("Jane Doe", "133"));
_itemHandler.Add(new Item("Sammy Doe", "45"));
}
public List<Item> Items
{
get { return _itemHandler.Items; }
}
}
}
The update the MainWindow.xaml to define the DataContext provided by our MainWindowViewModel, and the ListView control whose ItemsSource is bound to the view model:
MainWindow.xaml
<Window x:Class="ListViewWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ListViewWpf"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Window.Resources>
<Style x:Key="ListViewStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Left" />
</Style>
</Window.Resources>
<Grid>
<ListView Margin="10" ItemsSource="{Binding Items}" HorizontalAlignment="Left" HorizontalContentAlignment="Left">
<ListView.View>
<GridView>
<GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Name" Width="320" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Matches" Width="80" DisplayMemberBinding="{Binding Matches}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
Thus we have our minimalist implementation of binding data to a ListView control using the MVVM pattern: