【发布时间】:2020-02-16 08:16:53
【问题描述】:
我正在尝试实施“第一种方法”,如下所述: Filling a Datagrid with dynamic Columns
我修改了代码以包含 2 行并添加了一个用户类。我遇到了两个问题:1)“固定”列不显示数据,2)如果我尝试在 DataGrid 中编辑数据,程序中止(在调试下它表明我无法编辑数据)。
如何让“固定”列显示数据以及如何使这些列可编辑?
public MainWindow()
{
InitializeComponent();
var newColumnNames = new string[] { "Name1", "Name2" };
//var users = new User[] { new User { Id = "First User" } };
var users = new User[] { new User { Id = "First User", Image = "image 1" } ,
new User { Id = "Second User", Image="image 2"}};
var newProps = new Dictionary<string, object>[]
{
new Dictionary<string, object>
{
{ "Name1", "First Name of First User" },
{ "Name2", "Second Name of First User" },
},
new Dictionary<string, object>
{
{"Name1", "First Name of Second User" },
{"Name2", "Second Name of Second User" }
}
};
//Column Headers
AddColumns(newColumnNames);
PopulateRows(users, newProps);
}
void AddColumns(string[] newColumnNames)
{
foreach(string name in newColumnNames)
{
grid.Columns.Add(new DataGridTextColumn
{
// bind to a dictionary property
Binding = new Binding("Custom[" + name + "]"),
Header = name,
IsReadOnly = false
});
}
}
void PopulateRows(User[] users, Dictionary<string, object>[] customProps)
{
var customUsers = users.Select((user, index) => new CustomUser
{
Custom = customProps[index]
});
grid.ItemsSource = customUsers;
}
}
XAML 文件
<DataGrid x:Name="grid" HorizontalAlignment="Left" Height="409" VerticalAlignment="Top" Width="782" AutoGenerateColumns="False" CanUserAddRows="True" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" Header="id" IsReadOnly="False"/>
<DataGridTextColumn Binding="{Binding Image}" Header="image" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>
支持代码包括:
class CustomUser : User
{
public Dictionary<string, object> Custom { get; set; }
public CustomUser() : base()
{
Custom = new Dictionary<string, object>();
}
}
【问题讨论】: