我在XAML中有一个ListView,它以GridView(带列)方式显示其源集合。 但是我打算使用相同的ListView来显示源集合可能在图像网格中,或者某些卡片视图中。 我希望ListView根据ComboBox选择进行更改。所以说对于ComboBox值1,ListView应该显示一个GridView,对于值为2的ListView应该显示卡片视图。 目前我的ListView将GridView集指定为其View属性:
<ListView ItemsSource="{Binding PersonList}" Width="450" HorizontalAlignment="Right" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}" />
<GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}" />
<GridViewColumn Header="Ip Address" DisplayMemberBinding="{Binding Path=IpAddress}" />
</GridView>
</ListView.View>
</ListView>
我想知道如何更改ListView以根据ComboBox触发器显示不同的视图。
答案 0 :(得分:1)
ListView View
是类型为ViewBase
的DependencyProperty。因此,您可以做的是创建自己的自定义视图,并可以通过组合框选定项目上的DataTrigger进行设置。
Microsoft已在线提供样本,您可以从here下载。
或强>
可能你可以在资源中定义两个独立的ListView 作为两个单独的DataTemplates。
<Window.Resources>
<DataTemplate x:Key="GridViewTemplate">
<ListView/> <!-- GridView -->
</DataTemplate>
<DataTemplate x:Key="CardViewTemplate">
<ListView/> <!-- CardView -->
</DataTemplate>
</Window.Resources>
并且有一个ContentControl
,您可以根据组合框中的选定值交换其内容。
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content"
Value="{StaticResource GridViewTemplate}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedValue}" Value="Value2">
<Setter Property="Content"
Value="{StaticResource CardViewTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>