Настройка ItemTemplate на основе значения CheckBox - PullRequest
1 голос
/ 08 апреля 2010

У меня есть DataTemplate, который содержит CheckBox и ListBox. Когда флажок установлен, я хочу изменить свойство ItemTemplate в ListBox, чтобы изменить внешний вид каждого элемента.

Прямо сейчас это выглядит так:

<DataTemplate DataType={x:Type MyViewModel}>
   <DockPanel>       
      <CheckBox DockPanel.Dock="Bottom"
                Content="Show Details"
                HorizontalAlignment="Right"
                IsChecked="{Binding ShowDetails}" 
                Margin="0 5 10 5" />

      <ListBox ItemsSource="{Binding Items}"
               ItemTemplate="{StaticResource SimpleItemTemplate}"
               Margin="10 0 10 5">
         <ListBox.Triggers>
            <DataTrigger Binding="{Binding ShowDetails}" Value="True">
               <Setter Property="ItemTemplate"
                       Value="{StaticResource DetailedItemTemplate}" />
            </DataTrigger>
         </ListBox.Triggers>
      </ListBox>
   </DockPanel>
</DataTemplate>

Однако, когда я пытаюсь скомпилировать, я получаю следующие сообщения об ошибках:

Значение ItemTemplate нельзя присвоить свойству Property. Неверное значение PropertyDescriptor.

и

Не удалось найти статический член ItemTemplateProperty для типа «ContentPresenter».

Я все еще довольно новичок в WPF, так что, возможно, есть кое-что, что я не совсем понимаю?

1 Ответ

2 голосов
/ 08 апреля 2010

Это необходимо сделать с помощью стиля ListBox, а не напрямую через его коллекцию триггеров.Коллекция Triggers в FrameworkElement может содержать только EventTriggers (поэтому я удивлен, что ваш пример дошел до того, что пожаловался на свойства!).Вот что вам нужно сделать:

<ListBox ItemsSource="{Binding Items}">
  <ListBox.Style>
    <Style TargetType="ListBox">
      <Setter Property="ItemTemplate" Value="{StaticResource SimpleItemTemplate}" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding ShowDetails}" Value="True">
           <Setter Property="ItemTemplate"
                   Value="{StaticResource DetailedItemTemplate}" />
        </DataTrigger>
     </Style.Triggers>
   </Style>
  </ListBox.Style>
</ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...