我有一个包含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的新手,所以也许有些东西我不太了解?
答案 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>