首页 > 解决方案 > 如何将值添加到在运行时定义的列(WPF Datagrid)

问题描述

我的 XAML(包含两个静态列)

<DataGrid x:Name="grid" Grid.Row="1" AutoGenerateColumns="False" ItemsSource=" 
{Binding }">
        <DataGrid.Columns>          
            <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
        </DataGrid.Columns>
    </DataGrid>

Datagrid 集合的代码隐藏。

 ObservableCollection<Users> list = new ObservableCollection<Users>();
    class Users
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

在运行时从 Code Behind 添加列

private void AddColumnsAtRuntime()
    {
        grid.Columns.Add(new DataGridTextColumn()
        {
            Header = "Address",
            Binding = new Binding("Address") 
        });
    }

在此处输入图像描述

填充集合

 private void AddRow()
    {
        list.Add(new Users()
        {
            Id = 1,
            Name = "John"
        });
    }

在此处输入图像描述

我想要的是-如何向静态和动态列添加值,静态列将包含一些样式触发器

标签: c#wpfdatagrid

解决方案


ObservableCollection<Users>您可以绑定到可以动态添加列DataView的 a ,而不是绑定到 a :DataTable

DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("Id"));
dataTable.Columns.Add(new DataColumn("Name"));
list = dataTable.DefaultView;
...
list.Table.Rows.Add(1, "John");
...
list.Table.Columns.Add(new DataColumn("Address"));
list.Table.Rows[dataTable.Rows.Count - 1]["Address"] = "address...";

XAML 与之前完全相同:

<DataGrid.Columns>
    <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
    <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>

推荐阅读