代码之家  ›  专栏  ›  技术社区  ›  Excel Kobayashi

WPF中嵌套列表视图的层次数据绑定

  •  1
  • Excel Kobayashi  · 技术社区  · 16 年前

    我有一些数据有一个明细表。我希望数据以列表视图的形式显示。我希望在原始列表中选择项目时,详细信息数据显示为嵌套列表视图。我似乎不知道如何使数据绑定工作。

    {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 回复  |  直到 16 年前
        1
  •  1
  •   Bryan Anderson    16 年前

    如果我正确理解您的问题,您需要绑定到原始列表的SelectedItem:

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

    然后根据需要设置datatemplate/view。如果不想将ElementName用于绑定,也可以使用RelativeSource,但我发现ElementName更易于阅读和理解。

        2
  •  0
  •   Mitch Mitch    15 年前

    您需要将问题行更改为以下内容:

    <ListView ItemsSource="{Binding FK_History_HistoryItems}">
    

    有了这个变化,控制装置工作得很好。我一直在做类似的事情,但没有结果。我真的很喜欢你在这方面的工作。

        3
  •  0
  •   J Townsend    9 年前

    要使触发器工作,您需要设置ControlTemplate TargetType:

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

    如果没有指定TargetType(作为可选类型),则将混淆XAML呈现。。。