2010-04-08 88 views
1

我有一個DataTemplate包含一個CheckBox和ListBox。當選中CheckBox時,我想更改ListBox上的ItemTemplate屬性以更改每個項目的外觀。基於CheckBox值設置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」不能被分配到財產「屬性'。無效的PropertyDescriptor值。

無法在類型 'ContentPresenter' 找到靜態成員 'ItemTemplateProperty'。

我對WPF還比較陌生,所以也許我有點不太明白?

+0

更新:我已經意識到,我可以只使用一個觸發器,而不是一個DataTrigger,並設置SOURCENAME的複選框,但無論如何,發生同樣的錯誤。 – jeremyalan 2010-04-08 04:06:43

回答

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> 
+0

這樣做,謝謝! – jeremyalan 2010-04-08 04:47:46