根据CheckBox值设置ItemTemplate

时间:2010-04-08 03:59:30

标签: c# .net wpf

我有一个包含CheckBox和ListBox的DataTemplate。选中CheckBox后,我想更改ListBox上的ItemTemplate属性以更改每个项目的外观。

现在,它看起来像这样:

<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值无效。

  

在“ContentPresenter”类型上找不到静态成员'ItemTemplateProperty'。

我还是WPF的新手,所以也许有些东西我不太了解?

1 个答案:

答案 0 :(得分:2)

您需要通过ListBox样式而不是直接通过其Triggers集合来执行此操作。 FrameworkElement的Triggers集合只能包含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>