2009-01-03 121 views
1

我有一個ItemsControl的ItemsSource在運行時綁定到一個ObservableCollection組件> ObservableCollection <。我已經定義了一個類型爲Component的數據模板,它工作正常。WPF Datatemplating一個ItemsControl

現在組件有一個ObservableCollection <控制>,我想添加另一個ItemsControl在我的組件數據模板中呈現所有的控件。這裏的控件是我自己的與wpf控件無關的自定義對象。

有不同類型的控件,所以我試圖使用ItemTemplateSelector爲每種類型選擇正確的模板。在下面的示例中,我只顯示了其中一個模板「RWString」,我在MyControlTemplateSelector中使用FindResource重寫了SelectTemplate。但SelectTemplate永遠不會被調用(使用斷點來檢查)。我的xaml有什麼問題嗎?

<ItemsControl.Resources> 
    <src:MyControlTemplateSelector x:Key="XSelector" /> 
    <DataTemplate DataType="{x:Type src:Component}" > 
     <Expander Visibility="{Binding Path=Show}"> 
       <ItemsControl ItemsSource="{Binding Path=Contrls}" 
          ItemTemplateSelector="{StaticResource XSelector}"> 
       <ItemsControl.Resources> 
        <DataTemplate x:Key="RWstring" > 
         <TextBlock Text="{Binding Path=Label}"/> 
        </DataTemplate> 
       </ItemsControl.Resources> 
       <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
      </ItemsControl> 
     </Expander> 
    </DataTemplate> 
</ItemsControl.Resources> 

更新: Contrls是不是一個錯字,它只是我使用一個愚蠢的命名系統。 Contrls是ObservableCollection類型的Component的一個屬性。此外我之所以使用ItemsTemplateSelector的原因是,ObservableCollection控制>包含通用類型的對象,如控制< INT>控制<字符串>等等所有派生自控制和顯然你不能創建數據模型引用泛型類型。

更新3:刪除更新2,因爲它是無關的。通過將StaticResource更改爲DynamicResource,我得到了ItemTemplateSelector。但我不知道爲什麼這個工程...

回答

1

我猜這不適用於StaticResource,因爲資源位於ItemsControl中,可能還沒有在加載時創建StaticResources時進行評估。

加載時的DynamicResources在加載時評估爲表達式,然後在請求時評估爲正確的值。

嘗試移動ItemsControl外部的資源。

+0

謝謝你是這個問題。我在運行時創建的itemscontrol內創建它 – Sharun 2009-01-05 13:17:39

0

在你綁定嵌套ItemsControl的行,路徑是否正確?它目前是「Contrls」,應該是「Controls」嗎?

+0

它是有爭議的。我需要改變這個名字,儘管......這很混亂。 – Sharun 2009-01-03 10:52:22