ListBox ListBoxes привязан к Коллекции Коллекций - PullRequest
0 голосов
/ 13 января 2012

Я пытаюсь привязать свойство ObservableCollection<ObservableCollection<Location>> к ListBox с ItemTemplate ListBox, который, в свою очередь, имеет ItemTemplate, который является сеткой. Компоновка списка внутри списка выглядит нормально. Однако у меня возникли проблемы с привязкой данных.

Для списка элементов второго уровня ItemsSource я попытался выполнить привязку, используя привязки текущего элемента коллекции ItemSource="{Binding /}" и ItemsSource="{TemplateBinding /}". Я новичок в WPF и использую MVVM, поэтому любые советы и / или критика приветствуются.

<ListBox Grid.Row="4" Width="610" Height="600" HorizontalContentAlignment="Stretch" ItemsSource="{Binding CurrentLocation.Children}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBox Width="550" Height="100" Margin="5"   HorizontalContentAlignment="Stretch"  ItemsSource="{Binding /}" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid HorizontalAlignment="Stretch" Margin="5">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="3*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                                <RowDefinition Height="*" />
                            </Grid.RowDefinitions>
                            <TextBlock Grid.Column="0" Grid.Row="0" Margin="5" Text="Name:" />
                            <TextBlock Grid.Column="0" Grid.Row="1" Margin="5" Text="Description:" />
                            <TextBlock Grid.Column="1" Grid.Row="0" Margin="5" Text="{Binding Name}" />
                            <TextBlock Grid.Column="1" Grid.Row="1" Margin="5" Text="{Binding Description}" TextWrapping="Wrap" />
                            <Button Grid.Column="2" Grid.Row="0" Command="{Binding TODO}">
                                <TextBlock Text="Edit"/>
                            </Button>
                            <Button Grid.Column="2" Grid.Row="1" Command="{Binding TODO}">
                                <TextBlock Text="Delete"/>
                            </Button>
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Ответы [ 2 ]

1 голос
/ 13 января 2012

Каждый ListBoxItem содержит DataContext того, что находится в родительской коллекции, поэтому вы можете ничего не указывать в Binding.

<ListBox ItemsSource="{Binding MyCollectionOfCollections}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!-- DataContext of each item will an inner ObservableCollection<Location> -->
            <ListBox ItemsSource="{Binding }" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
1 голос
/ 13 января 2012

Правильное обозначение для привязки к текущему DataContext в целом: {Binding}.

<ListBox ... ItemsSource="{Binding CurrentLocation.Children}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBox ... ItemsSource="{Binding}" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid HorizontalAlignment="Stretch" Margin="5">
                            <!-- snip -->
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...