Я долго искал, но думаю, что, может быть, я смотрю не в ту сторону.У меня есть DataGrid
, где ItemsSource
установлен в список Book
объектов.В то же время объект Book
содержит список объектов Chapter
.
public class Book {
public string Title;
public List<Chapter> AvailableChapters;
}
public class Chapter {
public int ChapterNumber;
public int NumberOfPages;
}
Я использую их таким образом в DataGrid:
<DataGrid SelectionMode="Extended"
HeadersVisibility="Column"
CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding Title}" />
<DataGridTextColumn Header="Available chapters" Binding="{Binding AvailableChapters}" />
<!-- This is what I tried
<DataGridTemplateColumn Header="Available chapters">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding AvailableChapters}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>-->
</DataGrid.Columns>
</DataGrid>
Моя цель состоит в том, чтобыпоказать список глав внутри книги в виде списка строк, где каждая строка является номером главы (свойство ChapterNumber
).По этой причине я пытался каким-то образом получить доступ к свойству ChapterNumber
в свойстве ChapterList
.Пробовал использовать даже ListBox
или AvailableChapters.ChapterNumber
, но это не имеет смысла).
Пример:
![enter image description here](https://i.stack.imgur.com/amZ8I.png)
Редактировать
Попытка с преобразователем, но, хотя значение не является нулевым, оно говорит, что его длина равна нулю.
public class ChapterListToStringListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
List<Chapter> chapters = value as List<Chapter>;
if (chapters == null)
{
chapters = new List<Chapter>();
}
Debug.Print(chapters.Count.ToString()); // "0"
Debug.Print(chapters[0].ChapterNumber); // Error: index out of range
string result = string.Join(" ", chapters.Select(chap => chap.Name));
return result;
}
}
}