使用嵌套列表和动态列填充DataGrid

问题描述

我有一个奇怪的数据模型,我试图在数据网格中生成动态列并正确绑定项目。

我有一个Row对象的列表,我想将它们绑定到DataGrid并使用简单的DataGridTextColumn显示。

<controls:DataGrid
   Grid.Row="1"
   x:Name="dataGrid"
   ItemsSource="{x:Bind ViewModel.CurrentRows}"

我的目标是从第一行中获取列的列表,并在设置绑定时构建网格列。我在弄清楚在RowValue.value上绑定数据的正确方法时遇到了麻烦。

public TablePage()
{
    InitializeComponent();

    dataGrid.ItemsSource = ViewModel.CurrentRows;

    foreach (Column column in ViewModel.CurrentRows.FirstOrDefault().Values.Select(x => x.key))
    {
        dataGrid.Columns.Add(new DataGridTextColumn()
        {
            Header = column.ColumnValidation.column_label,Binding = new Binding() { Path = new PropertyPath("Values.value") }
        });
    }
}

在我的视图模型中,我有:

public ObservableCollection<Row> CurrentRows

Row对象如下所示:

public class Row: INotifyPropertyChanged
{
    public List<RowValue> Values { get; set; } = new List<RowValue>();

    public event PropertyChangedEventHandler PropertyChanged;
}

最后,一个RowValue对象看起来像这样:

public class RowValue: INotifyPropertyChanged
{
    public Column key { get; set; }
    public string value { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}

列看起来像这样:

public class Column
{
    public string name;
    public ColumnValidation ColumnValidation;
}

ColumnValidation看起来像这样:

public class ColumnValidation
{
    public string column_label;
    public DataTypeEnum data_type;
    public int width;
    public int decimal_places;
    public int display_order;
    public string calculation_formula;
    public string edit_style;
    public string default_value;
    public decimal? minimum_value;
    public decimal? maximum_value;
    public bool is_column_nullable = false;
    public bool inherit_values = false;
    public bool display_column = false;
    public bool is_editable = false;
    public int column_style;
    public string code_table_name;
    public string code_display_name;
    public string code_data_column_name;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)