标题可能有误,但不是,请继续阅读。
我需要一个动态数据网格,所以我使用这种方法来创建列,该方法获取要显示的“选定”列:
public void ConfigureGridColumns()
{
App.Instance.MainWindow.grdDetail.mainGrd.Columns.Clear();
var stats = new List<Statistic>();
stats.AddRange(App.Instance.Manager.PersonalizeStatistics.OrderBy(x => x.Index).Where(x => x.Selected).Select(x => x.Statistic));
foreach (var stat in stats)
{
var column = new DataGridTextColumn
{
Header = stat.Name,
Binding = new Binding(stat.Key)
};
}
}
现在,我不想创建一个包含所有列的模型,因为我有超过 150 个动态列。
因此,我通过构建自定义 DataTable 来动态生成 ItemsSource,其中行的列由键映射,如前所述:
private void ConfigureGridSource()
{
var dt = new DataTable("stats");
foreach (var player in App.Instance.Manager.Players.Values.Take(5))
{
var row = dt.NewRow();
foreach (var stat in stats)
{
if (!dt.Columns.Contains(stat.Statistic.Key))
t.Columns.Add(stat.Statistic.Key, typeof(StatisticPersonalizedValue));
var persStat = new StatisticPersonalizedValue(stat);
persStat.Value = player.Statistics[stat.Statistic.Key];
row[stat.Statistic.Key] = persStat;
}
dt.Rows.Add(row);
}
grdDetail.mainGrd.ItemsSource = CollectionViewSource.GetDefaultView(dt.DefaultView);
}
问题是:
和
Binding = new Binding(stat.Key)
我将 StatisticPersonalizedValue 的命名空间作为文本
和
Binding = new Binding("Value")
我得到空字符串(值是 StatisticPersonalizedValue 的属性,在第二种方法中被赋值)
我正在使用模型,因为我也有正负值的设置器,以防万一,您对如何解决这个问题有任何想法吗?