C# Wpf DataGrid按列表属性动态设置列
我有一个带有DataGrid的caliburn micro MVVM小项目。列将由x个“设置”组成,行将由“自定义行”组成。我想使用ObservableCollection,其中CustomRow有一个函数属性和一个设置属性集合。对于此集合中的每个设置,应存在一个值为setup的列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
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
属性直接绑定到源属性,因此您需要以某种方式自己创建列
您应该在视图、控件或附加到其中任何一个的附加行为中执行此操作。视图模型不应创建任何列