c# - style - wpf表格




是否有可能将List<Object>包含List<String>绑定到DataGrid (3)

你可以试试这个

<DataGrid ItemsSource="{Binding lstStu}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="name" Binding="{Binding Name}"/>
                <DataGridTemplateColumn Header="list">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ListBox ItemsSource="{Binding Marks}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

如果你不想在列表中显示标记,并且你有固定的标记数,你可以这样做

<DataGridTextColumn Header="name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="mark1" Binding="{Binding Marks[0]}"/>
<DataGridTextColumn Header="mark2" Binding="{Binding Marks[1]}"/>

我的问题是如何将List<Object> (其中包含一个List<String> )绑定到WPF中的DataGrid

可以说,类看起来像这样

Class Student
{
         String Name;
         List<String> Marks;
}

比方说,我有List<Student>但我将如何绑定到数据源中的数据网格。

我敢肯定, DataGrid.DataSource=List<Student>不能按预期工作。

这是我想要的


你必须使用下面的代码

Class Student
{
         String Name;
         List<String> Marks;
}


 private ObservableCollection<Student> _student=new ObservableCollection<Student>();

    public ObservableCollection<Student> student
    {
        get { return _student; }
        set { _student = value; }
    }

和你的Itemsource看起来像

<DataGrid ItemsSource="{Binding student}">
        <DataGrid.ItemTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding Marks}"></DataGrid>
            </DataTemplate>
        </DataGrid.ItemTemplate>
    </DataGrid>

首先,您需要拥有公共属性,而不是模型中的字段。 像那样:

public class Student
{
         public String Name {get;set;}
         public List<String> Marks {get;set;}
}

然后为网格提供datacontext。 在代码后面添加如下内容:

var StudentsList = new List<Student>();
//populate the list.....    
DataContext=StudentsList;

最后一件事是将DataContext绑定到xaml中的控件。 像其他答案一样:

 <ListView ItemsSource="{Binding StudentsList}">
        <ListView.ItemTemplate>
                <DataTemplate>
                       <DataGrid ItemsSource="{Binding Marks}" />
                </DataTemplate>
        </ListView.ItemTemplate>
 </ListView>




datagrid