我在WPF中有一个DataGrid,它应该显示一本Books的集合。
书籍如下所示:
public class Book
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private string title = "";
public string Title
{
get
{
return title;
}
set
{
title = value;
OnPropertyChanged("Title");
}
}
private List<Writer> writers = new List<Writer>();
public List<Writer> Writers
{
get
{
return writers;
}
set
{
writers = value;
OnPropertyChanged("Writers");
}
}
public Book() { }
public Book(string bookTitle)
{
this.Title = bookTitle;
}
}
这是Writer类:
public class Writer
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private string fullname = "";
public string Fullname
{
get
{
return fullname;
}
set
{
fullname = value;
OnPropertyChanged("Fullname");
}
}
private string forename = "";
public string Forename
{
get
{
return forename;
}
set
{
forename = value;
OnPropertyChanged("Forename");
}
}
private string surename = "";
public string Surename
{
get
{
return surename;
}
set
{
surename = value;
OnPropertyChanged("Surename");
}
}
public Writer() { }
public Writer(string writersForename, string writersSurename)
{
this.Forename = writersForename;
this.Surename = writersSurename;
this.Fullname = string.Format("{0} {1}", this.Forename, this.Surename);
}
}
现在,我想在DataGrid的单个单元中显示作者。像这样:
Title | Writer
------------------------
Book1 | Writer1
| Writer2
------------------------
Book2 Writer1
...
但是,如果我试图将List绑定(bind)到单元格,它只会在单元格中显示“Collection”作为值。
这是我正在使用的XAML:
<ToolKit:DataGrid x:Name="dataGrid1" DataContext="{StaticResource ItemCollectionViewSource}" IsReadOnly="True" ItemsSource="{Binding}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" AutoGenerateColumns="False" >
<ToolKit:DataGrid.Columns>
<ToolKit:DataGridTextColumn Header="Title" Binding="{Binding Path=Title}" />
<ToolKit:DataGridTextColumn Header="Writer" Binding="{Binding Path=Writers}" />
</ToolKit:DataGrid.Columns>
</ToolKit:DataGrid>
我已经尝试将单元格绑定(bind)到“Writers.Fullname”,但这也不起作用。
您能帮我吗,我找不到这种绑定(bind)的任何示例。
问候
系统
最佳答案
您可以使用DataGridTemplateColumn
创建ItemsControl
列,该列将绑定(bind)到Writers
列表:
<ToolKit:DataGridTemplateColumn Header="Writer">
<ToolKit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Writers}" DisplayMemberPath="Fullname"/>
</DataTemplate>
</ToolKit:DataGridTemplateColumn.CellTemplate>
</ToolKit:DataGridTemplateColumn>