2010-06-24 95 views
2

我有一个ListView绑定到ObservableCollection<Foo>。在选择ListViewItem时,我在容器中显示SelectedItem(Foo成员)的详细信息。它工作正常。将SelectedItem细节显示在其旁边

现在我只想显示SelectedItem旁边的详细信息。即,如果我选择第四个ListViewItem,那么容器的顶部应该与ListViewItem的顶部相同。我如何同步他们的位置,只要它在滚动List时会产生任何问题。

P.S:滚动条是隐藏

这个问题尚未解决。任何人都可以帮忙吗?

回答

1

原来的答案

是否细节需要在一个单独的容器?我可能会误解你的榜样,但是我还以为你能达到你想要加入的细节部分的项目模板列表项,然后隐藏/显示它的基础上的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中响应意见你可以亲近

下面的例子将放置一个PopupListView的右侧,只有所选项目可见:

<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属性来指定Popup应该出现的正确的目标元素,并将PlacementTarget属性绑定到ListViewItem类型的第一个祖先(即父容器)。

这导致如下面的例子的外观:

working example

+0

@Steve Greatrex:这将增加的ListViewItem的高度也,当我选择它。这就是为什么我把细节放在ListView之外的另一个容器中。 – Amsakanna 2010-06-25 06:49:53

+0

在这种情况下,您是否可以将额外的内容放入Popup中,并在DataTrigger中设置Popup.IsOpen属性?这样,您可以在不影响高度的情况下,相对于ListViewItem或多或少地调整Popup的位置。唯一的缺点是,它可能会掩盖其他内容... – 2010-06-25 10:24:35

+0

@Steve Greatrex:伟大的提示!弹出。感谢那。 – Amsakanna 2010-07-14 09:25:52