programing

WPF 데이터 그리드에 목록을 바인딩하려면 어떻게 해야 합니까?

megabox 2023. 5. 4. 19:47
반응형

WPF 데이터 그리드에 목록을 바인딩하려면 어떻게 해야 합니까?

저는 WPF가 처음이라 기본적인 데이터 바인딩을 하고 싶습니다.사용자 지정 개체 목록이 있는데 이 목록을 데이터 그리드에 바인딩하려고 합니다.

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의 데이터 바인딩에 익숙합니다.네트, 내가 쉽게 말할 수 있는 곳:

this.dataGrid1.DataSource = list;

WPF에서 어떻게 진행해야 합니까?

만약 당신이 그것을 기대하지 않는다면.list그러면 Asp에 사용한 것과 동일한 접근 방식을 사용할 수 있습니다.넷(대신)DataSourceWPF의 이 속성은 일반적으로 이름이 지정됩니다.ItemsSource):

this.dataGrid1.ItemsSource = list;

하지만 당신이 당신의 것을 교체하고 싶다면,list새 수집 인스턴스와 함께 사용하는 것을 고려해야 합니다.databinding.

이 작업은 xaml 코드로 수행해야 합니다.

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

사용하는 것이 좋습니다.ObservableCollection백업 컬렉션으로, 데이터 그리드가 구현될 때 변경 사항을 전파할 수 있습니다.INotifyCollectionChanged.

실제로 정렬, 필터링 등을 적절하게 지원하기 위해 수집 보기소스는 다음과 같이 DataGrid와 목록 간의 링크로 사용해야 합니다.

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

DataGrid 라인은 다음과 같습니다.

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

뒤에 있는 코드에서 CollectionView를 연결합니다.링크가 포함된 소스입니다.

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

자세한 예는 CoedProject에 대한 제 기사를 참조하십시오. http://www.codeproject.com/Articles/683429/Guide-to-WPF-DataGrid-formatting-using-bindings

xaml에서는 열 이름을 수동으로 지정할 필요가 없습니다.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();

    }

언급URL : https://stackoverflow.com/questions/4983951/how-do-i-bind-a-listcustomobject-to-a-wpf-datagrid

반응형