2013-09-25 45 views
0

我有一個ItemsControl,其中包含顯示在頁面上的一組項目。 ItemsControl有一個ItemTemplate屬性,它被設置爲某個DataTemplate資源。爲ItemsControl中的特定項目設置DataTemplate

<DataTemplate x:Key="SimpleTemplate"> 
     <!-- .... --> 
</DataTemplate> 

<DataTemplate x:Key="ComplexTemplate"> 
     <!-- .... --> 
</DataTemplate> 
............................... 
<ItemsControl 
     x:Name="MainCanvas" 
     DataContext="{StaticResource mainItems}" 
     ItemsSource="{Binding Path=Buttons}" 
     ItemTemplate="{StaticResource SimpleTemplate}" 
> 

     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Canvas Width="4000" Height="4000" /> 
      </ItemsPanelTemplate>      
     </ItemsControl.ItemsPanel> 

</ItemsControl> 

是否有可能以編程方式更改我的ItemsControl中的一個特定項目的DataTemplate?

+0

DataTemplateSelector怎麼樣? http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector – metacircle

+0

根據您要設置數據模板的標準? –

+0

丹尼爾,我想在檢查項目源中的項目是否具有設置爲'true'的布爾屬性後設置數據模板 –

回答

2

聽起來像你正在尋找ItemTemplateSelector

您可以創建一個TemplateSelector,並決定在給定的項目應用基於哪一個模板:

public class MyTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate SimpleTemplate { get; set; } 

    public DataTemplate ComplexTemplate { get; set; } 

    public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container) 
    { 
     // Logic to decide which template to apply goes here 

     return // Either SimpleTemplate or ComplexTemplate 
    } 
} 

在XAML,添加您的模板選擇作爲資源

<local:MyTemplateSelector x:Key="itemTemplateSelector"> 
      <local:MyTemplateSelector.SimpleTemplate> 
       <DataTemplate> 

        <!-- Implementation goes here --> 

       </DataTemplate> 
      </local:MyTemplateSelector.SimpleTemplate> 
      <local:MyTemplateSelector.ComplexTemplate> 
       <DataTemplate> 

        <!-- Implementation goes here --> 

       </DataTemplate> 
      </local:MyTemplateSelector.ComplexTemplate> 
</local:MyTemplateSelector> 

而在你ItemsControl

使用10
<ItemsControl 
    x:Name="MainCanvas" 
    DataContext="{StaticResource mainItems}" 
    ItemsSource="{Binding Path=Buttons}" 
    ItemTemplateSelector="{StaticResource itemTemplateSelector}"> 

希望這會有幫助

+0

我試過這種方法。但是我得到一個錯誤:「Error 4.屬性'ItemTemplateSelector'在類型'ItemsControl'上不存在 –

+0

@Denis_Sh你確定你正在使用[ItemsControl](http://msdn.microsoft.com/en-你可以在MSDN文檔中看到它有一個[ItemTemplateSelector](http:// http://// Library/System.Windows.Controls.ItemsControl.aspx),它來自'PresentationFramework.dll'中的System.Windows.Controls' namepsace。 msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemtemplateselector.aspx)property ... –

+0

當然,System.Windows.Controls.ItemsControl –

相關問題