Динамически изменяемый WPF ListView ItemsPanel & ItemsContainerStyle

У меня есть ListView в XAML, который отображает свою исходную коллекцию в виде 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.

1 ответ

Решение

Посмотреть список View является свойством DependencyProperty ViewBase, Итак, что вы можете сделать, это создать свои собственные пользовательские представления и установить их с помощью DataTrigger на выбранный элемент в выпадающем списке.

У Microsoft уже есть образец, доступный для этого онлайн, который вы можете скачать здесь.

ИЛИ ЖЕ

Может быть, вы можете определить два отдельных ListView в ресурсах как два отдельных шаблона данных.

<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>
Другие вопросы по тегам