如何在datagrid中绑定innergrid?

时间:2014-01-31 16:04:22

标签: c# wpf data-binding datagrid

基本上我是新的数据绑定在这里我试图在每行中插入内部网格来显示标记。任何人都可以帮助我如何实现这一目标。

XAML代码:

   <Grid>
    <DataGrid x:Name="dataGrid" AutoGenerateColumns="True" RowDetailsVisibilityMode="VisibleWhenSelected">  
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding marks}" AutoGenerateColumns="True"/>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate> 
    </DataGrid>  
</Grid>

下面是代码,其中包含2个类,一个用于学生,另一个用于标记

代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        dataGrid.ItemsSource = GetStudentsInfo();
    }

    private List<Student> GetStudentsInfo()
    {
        List<Student> stdColl = new List<Student>();

        stdColl.Add(new Student() { ID = 1, Name = "AAA", marks = new Marks() { Sub1 = 75, Sub2 = 80, Sub3 = 90 } });
        stdColl.Add(new Student() { ID = 2, Name = "BBB", marks = new Marks() { Sub1 = 45, Sub2 = 50, Sub3 = 70 } });
        stdColl.Add(new Student() { ID = 3, Name = "CCC", marks = new Marks() { Sub1 = 35, Sub2 = 80, Sub3 = 60 } });
        stdColl.Add(new Student() { ID = 4, Name = "DDD", marks = new Marks() { Sub1 = 75, Sub2 = 40, Sub3 = 90 } });

        return stdColl;
    }
}
public class Student
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Marks marks { get; set; }
}

public class Marks
{
    public int Sub1 { get; set; }
    public int Sub2 { get; set; }
    public int Sub3 { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您的内部数据网格必须像外部数据网格一样绑定到列表。

更改您的Mark类

public class Mark {

    public int Sub { get; set; }  

}

Mark属性更改为列表

public Marks marks { get; set; }

public List<Mark> Marks { get; set; }

添加学生时,请为他们提供新的List,而不是Mark

stdColl.Add(new Student() { ID = 4, Name = "DDD", Marks = new List<Mark>() { new Mark(){ Sub = 90; } } });

然后将小名称更改为绑定

ItemsSource="{Binding Marks}"

现在,您的绑定将在类Marks

中查找属性Student

作为另一个建议,请查看MVVM模式以及如何使用它。