ListView与可折叠项目?

时间:2009-07-22 11:55:50

标签: c# wpf listview

有没有人有想法,如何创建可折叠的ListView?

e.g。我有一个带有列的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:在我的情况下,我将有两种不同类型的信息,具体取决于“人物”对象
例如
- 有些人会告诉我姓氏+电话#
- 从其他人那里我会看到Job + Employer ..我想这对某种数据触发器来说是可能的吗?

编辑:

我已将代码编辑为以下内容:

<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>

这似乎有效,但我无法弄清楚如何通过点击一个列表标题来实现这种排序......任何想法?

2 个答案:

答案 0 :(得分:5)

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

我已经完成了一个测试布局,您可以直接将其粘贴到窗口中,但是您可以将其简单地转换为DataTemplate,重要的部分是第二个堆栈面板上的可见性绑定:

    <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>

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

答案 1 :(得分:-1)

您可以修改ItemTemplate的{​​{1}}并创建符合您描述的内容。简而言之,您需要像这样编写XAML:

ListView