如何将List <CustomObject>绑定到WPF DataGrid?

我是WPF的新手,想做一些基本的数据绑定。 我有一个CustomObject的列表,并希望将其绑定到DataGrid。

MainWindow.xaml.cs

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 WpfApplication1 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); List<ArticleItem> list = new List<ArticleItem>() { new ArticleItem(){ ID=3, Title="test", ViewCount=5}, new ArticleItem(){ ID=3, Title="test", ViewCount=5}, new ArticleItem(){ ID=3, Title="test", ViewCount=5}, new ArticleItem(){ ID=3, Title="test", ViewCount=5}, }; } } public class ArticleItem { public int ID { get; set; } public int ViewCount { get; set; } public String Title { get; set; } } } 

这是我的网格如何:

 <DataGrid Height="179" HorizontalAlignment="Left" Margin="54,65,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="382"> <DataGrid.Columns> <DataGridTextColumn Header="ID"/> <DataGridTextColumn Header="ViewCount" /> <DataGridTextColumn Header="Title" /> </DataGrid.Columns> </DataGrid> 

我已经习惯了ASP.Net的数据绑定,我可以轻松地说:

 this.dataGrid1.DataSource = list; 

我怎样才能在WPF中继续?

如果你不希望你的list被重新创build,那么你可以使用与你使用Asp.Net相同的方法(而不是DataSource ,WPF中的这个属性通常被命名为ItemsSource ):

 this.dataGrid1.ItemsSource = list; 

但是,如果你想用新的集合实例replace你的list ,那么你应该考虑使用databinding

您应该在xaml代码中执行此操作:

 <DataGrid ItemsSource="{Binding list}" [...]> [...] </DataGrid> 

我build议你使用ObservableCollection作为你的后备集合,因为它会传播对数据网格的改变,因为它实现了INotifyCollectionChanged

实际上,要正确地支持sorting,过滤等,应该使用CollectionViewSource作为DataGrid和列表之间的链接,如下所示:

 <Window.Resources> <CollectionViewSource x:Key="ItemCollectionViewSource" CollectionViewType="ListCollectionView"/> </Window.Resources> 

DataGrid行看起来像这样:

 <DataGrid DataContext="{StaticResource ItemCollectionViewSource}" ItemsSource="{Binding}" AutoGenerateColumns="False"> 

在后面的代码中,将CollectionViewSource与链接链接起来。

 CollectionViewSource itemCollectionViewSource; itemCollectionViewSource = (CollectionViewSource)(FindResource("ItemCollectionViewSource")); itemCollectionViewSource.Source = itemList; 

有关详细示例,请参阅CoedProject上的文章: http : //www.codeproject.com/Articles/683429/Guide-to-WPF-DataGrid-formatting-using-bindings

您不需要在xaml中手动input列名称。 只需将AutoGenerateColumns属性设置为true,您的列表就会自动绑定到DataGrid。 参考代码。 XAML代码:

 <Grid> <DataGrid x:Name="MyDatagrid" AutoGenerateColumns="True" Height="447" HorizontalAlignment="Left" Margin="20,85,0,0" VerticalAlignment="Top" Width="799" ItemsSource="{Binding Path=ListTest, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" CanUserAddRows="False"> </Grid> 

C#

 Public Class Test { public string m_field1_Test{get;set;} public string m_field2_Test { get; set; } public Test() { m_field1_Test = "field1"; m_field2_Test = "field2"; } public MainWindow() { listTest = new List<Test>(); for (int i = 0; i < 10; i++) { obj = new Test(); listTest.Add(obj); } this.MyDatagrid.ItemsSource = ListTest; InitializeComponent(); }