1

我在 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 触发器显示不同的视图。

4

1 回答 1

1

ListViewView是一个 DependencyProperty 类型ViewBase。因此,您可以做的是创建自己的自定义视图,并可以通过 DataTrigger on combobox selected item 进行设置

Microsoft 已经在线提供了可用的示例,您可以从此处下载。

或者

可能您可以将资源中的两个单独的 ListView 定义为两个单独的 DataTemplate。

<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>
于 2014-02-18T18:03:49.230 回答