c# - objects - wpf datagrid multiselect




Wie binde ich ein List<CustomObject> an ein WPF DataGrid? (3)

Sie müssen Spaltennamen nicht manuell in XAML angeben. Setzen Sie die AutoGenerateColumns-Eigenschaft auf true, und Ihre Liste wird automatisch an DataGrid gebunden. Verweiscode XAML-Code:

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

    }

Ich bin neu bei WPF und möchte einige grundlegende Datenbindungen durchführen. Ich habe eine Liste eines CustomObject und möchte es an ein DataGrid binden.

HauptWindow.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; }
        }
    }

So sieht mein Raster aus:

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

Ich bin an die Datenbindung von ASP.Net gewöhnt, wo ich leicht sagen kann:

this.dataGrid1.DataSource = list;

Wie muss ich in WPF fortfahren?


Sie sollten es im XAML-Code tun:

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

Ich würde Ihnen raten, eine ObservableCollection als Backing-Sammlung zu verwenden, da dies Änderungen an das Datagrid weitergibt, da es INotifyCollectionChanged implementiert.


Wenn Sie nicht erwarten, dass Ihre list neu erstellt wird, können Sie den gleichen Ansatz verwenden wie für Asp.Net (anstelle von DataSource diese Eigenschaft in WPF normalerweise ItemsSource ):

this.dataGrid1.ItemsSource = list;

Wenn Sie Ihre list durch eine neue Sammlungsinstanz ersetzen möchten, sollten Sie eine databinding Betracht databinding .





datagrid