personalizar ejemplo columns c# wpf data-binding datagrid

c# - ejemplo - ¿Cómo puedo vincular una Lista<CustomObject> a una WPF DataGrid?



wpf datagrid columns (4)

Deberías hacerlo en el código xaml:

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

Le aconsejo que use un ObservableCollection como su colección de respaldo, ya que eso propagaría los cambios en la cuadrícula de datos, ya que implementa INotifyCollectionChanged .

Soy nuevo en WPF y quiero hacer algunos enlaces de datos básicos. Tengo una Lista de un CustomObject y quiero vincularlo a un 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; } } }

Así es como se ve mi grilla:

<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>

Estoy acostumbrado a la vinculación de datos de ASP.Net, donde puedo decir fácilmente:

this.dataGrid1.DataSource = list;

¿Cómo debo proceder en WPF?


En realidad, para admitir correctamente la clasificación, el filtrado, etc., se debe usar un CollectionViewSource como un enlace entre el DataGrid y la lista, como este:

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

La línea DataGrid se ve así:

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

En el código subyacente, vincula CollectionViewSource con su enlace.

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

Para ver un ejemplo detallado, consulte mi artículo sobre CoedProject: http://www.codeproject.com/Articles/683429/Guide-to-WPF-DataGrid-formatting-using-bindings


No necesita dar nombres de columna manualmente en xaml. Simplemente configure la propiedad AutoGenerateColumns como verdadera y su lista se vinculará automáticamente a DataGrid. referir el código. Código 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>

DO#

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(); }


Si no espera que se vuelva a crear su list , puede usar el mismo enfoque que utilizó para Asp.Net (en lugar de DataSource esta propiedad en WPF generalmente se denomina ItemsSource ):

this.dataGrid1.ItemsSource = list;

Pero si desea reemplazar su list con una nueva instancia de recopilación, debería considerar el uso de databinding .