将对象属性中的对象绑定到WPF Datagrid中

时间:2016-05-21 19:50:18

标签: c# wpf datagrid

我有两个班,播放器和记分卡。记分卡有许多属性,玩家也有属性,其中一个是记分卡对象。然后我有一系列玩家。如何设置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;

1 个答案:

答案 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;