Относительная привязка WPF с использованием иерархической структуры коллекции - PullRequest
0 голосов
/ 07 марта 2011

У меня есть ObservableCollection, содержащая ObservableCollection:

public class BooksDetailModel
{
    public BookModel Book{ get; set; }
    public ObservableCollection<AuthorModel> Authors { get; set; }
}

Свойство во ViewModel:

public ObservableCollection<BooksDetailModel> Books { get; set; }

Я хотел бы сделать это в ListBox следующим образом:

Книга1

  • Author1
  • Author2

Book2

  • Author1

и т.д.

Связать с верхним уровнем легко, но у меня проблемы с внутренней дочерней коллекцией.

XAML пока:

                <ListBox ItemsSource="{Binding Books}" BorderBrush="{x:Null}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical">
                            <TextBlock Text="{Binding Book.Name}" FontSize="12" FontWeight="Bold" />
                            <ListBox>
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding ???, Path=Author.Name}" FontSize="10" />
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

Любые предложения для ??? - Относительная привязка внутреннего источника элементов списка к коллекции авторов родительского источника.

1 Ответ

4 голосов
/ 07 марта 2011

Вы должны связать ItemsSource внутреннего ListBox со свойством Authors. И привязка в DataTemplate будет просто привязкой к свойству Name автора:

<ListBox ItemsSource="{Binding Books}" BorderBrush="{x:Null}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock Text="{Binding Book.Name}" FontSize="12" FontWeight="Bold" />
                <ListBox ItemsSource="{Binding Authors}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}" FontSize="10" />
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...