将列表项绑定到datagrid

时间:2016-01-23 22:33:02

标签: c# wpf data-binding wpfdatagrid

我遇到绑定问题。我想将列表项绑定到datagrid列。 datagrid中的一行表示一个项目列表。每个项目都在一列中。例如,索引为0的列表中的所有项都在索引为0的列中。

我的数据网格:

<DataGrid Name="AttacksForGroupsDG" 
              CanUserAddRows="False"
              CanUserDeleteRows="True"
              AutoGenerateColumns="False"
              DockPanel.Dock="Top"
              VerticalAlignment="Stretch"
              HorizontalAlignment="Stretch"
              Height="250">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Jméno vesnice" Binding="{Binding Name}" Width="120"/>
            <DataGridTextColumn Header="Souřadnice" Binding="{Binding Coords}" Width="70"/>
        </DataGrid.Columns>
    </DataGrid>

接下来,我有一个我绑定到的项目列表。此列表中的每个项目都代表我的数据网格中的一行。

public abstract class Group<T>
    where T : Village
{
    public ObservableCollection<T> Villages { get; private set; }

    // the rest of the code I deleted for a clarity
}

最后,我绑定到这个类。属性名称和Coords我从类Village继承。

public sealed class Def : Village
{
    public List<int> Attacks { get; set; }

    public Def()
        : base()
    {
        Attacks = new List<int>();
    }
}

因此,datagrid中的第一列将使用Name属性。第二列将使用Coords属性。我根据列Def中列表中的项目数在代码中动态创建的下一列。

我不知道如何将该列表中的项目绑定到各个列。

我感谢任何建议。

1 个答案:

答案 0 :(得分:0)

将ItemSource属性添加到DataGrid标记,并在您的Villages列表中添加一个绑定:

     <DataGrid Name="AttacksForGroupsDG" 
          CanUserAddRows="False"
          CanUserDeleteRows="True"
          AutoGenerateColumns="False"
          DockPanel.Dock="Top"
          VerticalAlignment="Stretch"
          HorizontalAlignment="Stretch"
          Height="250"
          ItemsSource="{Binding Villages}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Jméno vesnice" Binding="{Binding Name}" Width="120"/>
            <DataGridTextColumn Header="Souřadnice" Binding="{Binding Coords}" Width="70"/>
        </DataGrid.Columns>
    </DataGrid>