Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wpf DataGrid按列表属性动态设置列_C#_Wpf_Mvvm_Datagrid - Fatal编程技术网

C# Wpf DataGrid按列表属性动态设置列

C# Wpf DataGrid按列表属性动态设置列,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我有一个带有DataGrid的caliburn micro MVVM小项目。列将由x个“设置”组成,行将由“自定义行”组成。我想使用ObservableCollection,其中CustomRow有一个函数属性和一个设置属性集合。对于此集合中的每个设置,应存在一个值为setup的列 class CustomRow { public string Function { get; set; } public ObservableCollection<Setup> Setu

我有一个带有DataGrid的caliburn micro MVVM小项目。列将由x个“设置”组成,行将由“自定义行”组成。我想使用ObservableCollection,其中CustomRow有一个函数属性和一个设置属性集合。对于此集合中的每个设置,应存在一个值为setup的列

class CustomRow
{
    public string Function { get; set; }
    public ObservableCollection<Setup> Setups { get; set; }
}

// example class
class Setup
{
    public string Name { get; set; }
    public object Content { get; set; }
}
class自定义行
{
公共字符串函数{get;set;}
公共ObservableCollection设置{get;set;}
}
//示例类
班级设置
{
公共字符串名称{get;set;}
公共对象内容{get;set;}
}
因此,我需要能够根据itemssource动态添加列和行(所有设置集合的大小都相同)

我的问题是,我不知道如何将Setups属性转换为多列。 我花了一些时间在我认为应该是一个平凡的问题上。但是我错过了一些东西。
非常感谢您的帮助

项源
绑定或设置到
可观察集合
,然后获取视图中源集合中第一个
自定义行
设置
属性,例如:

private void Window_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    var vm = DataContext as YourViewModel;
    dataGrid.Columns.Clear();
    if (vm.Rows != null && vm.Rows.Count > 0)
    {
        var setups = vm.Rows[0].Setups;
        foreach (var setup in setups)
        {
            dataGrid.Columns.Add(new DataGridTextColumn { Header = setup.Name, Binding = new Binding("Content ") });
        }
    }
    dataGrid.ItemsSource = vm.Rows;
}
无法将
DataGrid
Columns
属性直接绑定到源属性,因此您需要以某种方式自己创建列

您应该在视图、控件或附加到其中任何一个的附加行为中执行此操作。视图模型不应创建任何列