我有两个班,播放器和记分卡。记分卡有许多属性,玩家也有属性,其中一个是记分卡对象。然后我有一系列玩家。如何设置WPF Datagrid以在第一列中显示Player的Name属性但在其他行中使用Player的Scorecard对象的属性显示每个玩家的玩家?
以下是课程......
class Scorecard
{
public Scorecard()
{
}
// Properties
public int Horses { get; set; } = -1;
public int Sheep { get; set; } = -1;
public int Cows { get; set; } = -1;
}
class Player
{
public Player(int playerId, string playerName)
{
ID = playerId;
Name = playerName;
Scorecard = new Scorecard();
}
// Parameters
public int ID { get; }
public string Name { get; }
public Scorecard Scorecard;
}
这就是我希望实现的目标(原谅ASCII图形,我没有足够的声誉点来发布图像!)...
| Name | Horses | Sheep | Cows |
| Pete | 12 | 2 | 4 |
| Lucy | 2 | 8 | 14 |
我已经四处寻找,找不到一个非常正确的解决方案。下面的代码让我得到了第一列,但它正在深入研究我无法解决的相关记分卡对象。
var col = new DataGridTextColumn();
var binding = new Binding("Name");
col.Binding = binding;
dgScoreGrid.Columns.Add(col);
dgScoreGrid.ItemsSource = playerArray;
答案 0 :(得分:1)
第一件事是让记分卡成为属性(不是字段)
// Parameters
// ...
public Scorecard Scorecard { get; }
并且根据Binding Path Syntax,可以通过与C#中类似的语法指定属性的子属性。
var col = new DataGridTextColumn();
var binding = new Binding("Name");
col.Binding = binding;
dgScoreGrid.Columns.Add(col);
dgScoreGrid.Columns.Add(new DataGridTextColumn{Binding = new Binding("Scorecard.Horses")});
dgScoreGrid.ItemsSource = playerArray;