Как добавить значения в столбцы, которые определяются во время выполнения (WPF Datagrid) - PullRequest
0 голосов
/ 08 октября 2019

Мой 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>

Код сзади для сбора данных.

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

Добавление столбцов во время выполнения из кода сзади

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

enter image description here

Заполнение коллекции

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

enter image description here

То, что я хочу, -Как добавить значения в статические и динамические столбцы, статические столбцы будут содержать триггер стиля

1 Ответ

0 голосов
/ 08 октября 2019

Вместо привязки к ObservableCollection<Users> можно привязать к DataView 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...