有没有人有想法,如何创建可折叠的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:在我的情况下,我将有两种不同类型的信息,取决于"人物"对象,
例如
- 有些人会告诉我姓氏+电话号码
- 而其他人我会看到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>
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我无法弄清楚如何通过点击一个列表头来进行这种排序..任何想法?
您应该能够使用简单的数据模板完成所有这些操作.顶行可以是在第一列中具有切换按钮的网格,然后在堆叠面板或网格(取决于布局)下方,其中可见性绑定到按钮的切换值.
我已经完成了一个可以直接粘贴到窗口中的测试布局,但是你可以将它简单地转换为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>
Run Code Online (Sandbox Code Playgroud)
数据模板也可以根据您绑定到的对象类型进行更改,因此如果您的不同布局可以链接到对象类型,则更改外观很简单.