Иерархическая привязка данных с вложенными ListViews в WPF - PullRequest
1 голос
/ 09 декабря 2008

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

Вот что у меня есть (проблема в {Binding Path=FK_History_HistoryItems}):

<ListView Name="lstHistory" ItemsSource="{Binding Source={StaticResource History}}" SelectionChanged="lstHistory_SelectionChanged">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Name" Width="100" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=Description}" Header="Description" Width="150" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=Total, Converter={StaticResource moneyConvert}}" Header="Total" Width="100" />
            <GridViewColumn DisplayMemberBinding="{Binding Converter={StaticResource categoryAggregate}}" Header="Categories" Width="100" />
        </GridView>
    </ListView.View>
    <ListView.Resources>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <Border>
                            <StackPanel>
                                <Border Name="presenter"
                                        Background="{TemplateBinding Background}"
                                        BorderBrush="{TemplateBinding BorderBrush}"
                                        BorderThickness="{TemplateBinding BorderThickness}"
                                        Padding="{TemplateBinding Padding}">
                                    <GridViewRowPresenter />
                                </Border>
                                <Border Name="details" Visibility="Collapsed" Margin="5"
                                        BorderBrush="Black" BorderThickness="2">
                                    <StackPanel Margin="5">
                                        <ListView ItemsSource="{Binding Path=FK_History_HistoryItems}">
                                            <ListView.View>
                                                <GridView>
                                                    <GridViewColumn DisplayMemberBinding="{Binding Path=Ammount}" Header="Ammount" Width="100" />
                                                    <GridViewColumn DisplayMemberBinding="{Binding Path=Category}" Header="Category" Width="100" />
                                                </GridView>
                                            </ListView.View>
                                        </ListView>
                                    </StackPanel>
                                </Border>
                            </StackPanel>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter TargetName="details" Property="Visibility" Value="Visible" />
                                <Setter TargetName="presenter" Property="Background" Value="Navy"/>
                                <Setter TargetName="presenter" Property="TextElement.Foreground" Value="White" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.Resources>
</ListView>

Ответы [ 3 ]

1 голос
/ 09 декабря 2008

Если я правильно понимаю ваш вопрос, вам нужно привязать к SelectedItem исходного списка:

<ListView ItemsSource="{Binding ElementName=lstHistory, Path=SelectedItem}">

А затем установите табличку с данными / представление при необходимости. Если вы не хотите использовать ElementName для привязки, вы также можете использовать RelativeSource, но я считаю, что ElementName легче читать и понимать.

0 голосов
/ 07 октября 2015

Чтобы заставить Триггер работать, вам нужно установить ControlTemplate TargetType:

<ControlTemplate TargetType="{x:Type ListViewItem}">

Без указания типа TargetType (в качестве типа Selectable) визуализация XAML будет сбита с толку ...

0 голосов
/ 31 января 2009

Вам нужно изменить строку проблемы на следующее:

<ListView ItemsSource="{Binding FK_History_HistoryItems}">

С этим изменением управление работает прекрасно. Я работал над чем-то похожим, но безрезультатно. Мне очень нравится твоя работа над этим.

...