2009-07-22 44 views
1

有没有人有一个想法,如何创建一个可折叠的ListView?带有可折叠项目的ListView?

例如我有一个ListView与列:姓名,年龄,县
和下面的条目:

+ Max | 20 | Switzerland
+ Joe | 25 | Germany
+ Bob | 30 | Italy

当我点击+,我想ListView控件崩溃像这样的:
- Max | 20 | Switzerland
Lastname: Eastwood
Phone: 0041 11 222 33 44

+ Joe | 25 | Germany
+ Bob | 30 | Italy

感谢您的帮助和想法! PS:在我的情况下,根据“人物”对象
(例如),我将拥有两种不同类型的信息。
- 有些人会告诉我姓+电话号码#
- 从其他人我会看到工作+雇主..我想这可能与某种数据触发器?

编辑:

我编辑的代码如下:

<ListView ItemsSource="{Binding Path=DisplayedListe, Mode=OneWay}" 
      VirtualizingStackPanel.IsVirtualizing="True" 
      IsSynchronizedWithCurrentItem="True" 
      Sorter:ListViewSorter.IsListviewSortable="True" 
      Name="mainListView" 
      > 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <ToggleButton x:Name="ToggleButton" Grid.Column="0" Content="+"/> 
        <Label Grid.Column="1" Content="Max"/> 
        <Label Grid.Column="2" Content="20"/> 
        <Label Grid.Column="3" Content="Switzerland"/> 
       </Grid> 
       <StackPanel Visibility="{Binding ElementName=ToggleButton, Path=IsChecked}"> 
        <Label Content="Lastname: Eastwood"/> 
        <Label Content="Phone: 0041 11 222 33 44"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 

     <!--<ListView.View> 
     <GridView > 
      <GridViewColumn Header="+" DisplayMemberBinding="{Binding Path=IsCollapsible, Mode=OneWay}"/> 
      <GridViewColumn Header="RgNr" DisplayMemberBinding="{Binding Path=RechnungsNr, Mode=OneWay}" /> 
      <GridViewColumn Header="ESR" DisplayMemberBinding="{Binding Path=Length, Mode=OneWay}"/> 
      <GridViewColumn Header="S" DisplayMemberBinding="{Binding Path=Status, Mode=OneWay}"/> 
      <GridViewColumn Header="M" DisplayMemberBinding="{Binding Path=AktuelleMahnStufe, Mode=OneWay}" /> 
     </GridView> 
    </ListView.View>--> 

</ListView> 

这似乎是工作,但我想不通我怎么可能通过点击的columnHeader使这个排序。 。 有任何想法吗?

回答

5

你应该可以用一个简单的数据模板完成所有这些工作。最上面一行可以是第一列中带有切换按钮的网格,然后是下面的一个堆栈面板或网格(取决于布局),其可见性绑定到按钮的切换值。

我做了一个测试的布局,您可以直接粘贴到一个窗口在这里,但你可以将其转换为一个DataTemplate足够简单,最重要的部分是可见的第二StackPanel的结合:

<Window.Resources> 
     <BooleanToVisibilityConverter x:Key="BoolToVis"/> 
    </Window.Resources> 
    <StackPanel> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
      </Grid.ColumnDefinitions> 
      <ToggleButton x:Name="ToggleButton" Grid.Column="0" Content="+"/> 
      <Label Grid.Column="1" Content="Max"/> 
      <Label Grid.Column="2" Content="20"/> 
      <Label Grid.Column="3" Content="Switzerland"/>   
     </Grid> 
     <StackPanel Visibility="{Binding ElementName=ToggleButton, Path=IsChecked, Converter={StaticResource BoolToVis}}"> 
      <Label Content="Lastname: Eastwood"/> 
      <Label Content="Phone: 0041 11 222 33 44"/> 
     </StackPanel> 
    </StackPanel> 

数据模板也可以根据您绑定的对象类型进行更改,因此如果您的不同布局可以链接到对象类型,那么更改外观很简单。

+0

谢谢,这看起来不错,但我怎么能在ListView整合这个(这样我就可以再整理)? – 2009-07-22 17:27:15

-1

您可以修改ListViewItemTemplate并创建将按照您描述的方式运行的内容。简单地说,你需要写XAML这样的:

<ListView> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     ... XAML to display each item in the ListView 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView>