代码之家  ›  专栏  ›  技术社区  ›  Amsakanna

显示SelectedItem详细信息

  •  2
  • Amsakanna  · 技术社区  · 14 年前

    ObservableCollection<Foo> . 选择ListViewItem时,我会在容器中显示SelectedItem(Foo成员)的详细信息。很好用。

    现在我只想在SelectedItem旁边显示细节。例如,如果我选择第四个ListViewItem,那么容器的顶部应该与ListViewItem的顶部相同。我将如何同步他们的立场,如果它应该创造任何问题,即使滚动列表。

    注意:滚动条是隐藏的

    这个问题还没有解决。有人能帮忙吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Steve Greatrex    14 年前

    原始答案

    细节是否需要放在单独的容器中?我可能误解了您的示例,但我原以为您可以通过将详细信息部分添加到列表项的项模板中,然后根据IsSelected标志隐藏/显示它来实现所需的功能:

    <ListView ItemsSource="{Binding}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <DockPanel>
                        <ContentControl DockPanel.Dock="Right" Name="DetailsControl" Content="{Binding}" ContentTemplate="{StaticResource DetailsTemplate}" />
                        <TextBlock Text="{Binding}" />
                    </DockPanel>
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" Value="False">
                            <Setter TargetName="DetailsControl" Property="Visibility" Value="Hidden" />
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    

    即使您不完全关注这种行为,我想您也可以通过使用其他内容(例如弹出窗口)替换示例中的ContentControl来接近您想要的内容


    根据评论编辑

    下面的示例将放置一个 Popup 在车的右侧 ListView 仅对所选项目可见的:

    <ListView ItemsSource="{Binding}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <DockPanel>
                    <TextBlock Text="{Binding}" />
    
                    <Popup Placement="Right"
                            PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}"
                            IsOpen="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}">
    
                        <Border Background="Black" Padding="3">
                            <TextBlock Text="{Binding}" />
                        </Border>
                    </Popup>
    
                </DockPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    

    Placement 属性指定 弹出窗口 应该出现在目标元素的右侧,并绑定 PlacementTarget 类型的第一个祖先的属性 ListViewItem (即父容器)。

    这会导致如下示例所示的外观:

    working example